NC63重写导出功能

因NC中提供的导入导出功能不能够满足开发的需求,故重写了导入导出功能,下面为导出功能的代码,导出我们只导出了表体的字段,有需求可以自行更改。仅供参考。

/**
 * @author conn
 * @date 2019-9-9
 */
package nc.ui.tzsc.bs.action;

import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.JFileChooser;

import nc.pub.templet.converter.util.helper.ExceptionUtils;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.pub.bill.BillCardPanel;
import nc.ui.pub.bill.BillItem;
import nc.ui.pub.report.ReportBaseClass;
import nc.ui.pubapp.uif2app.view.BillForm;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.editor.IEditor;
import nc.ui.uif2.model.AbstractAppModel;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * @author conn
 * @date 2019-9-9
 */
public class ExportBth extends NCAction {
	private AbstractAppModel model;
	private IEditor editor;
	protected static JFileChooser m_chooser = null;
	protected static ReportBaseClass tp;

	public IEditor getEditor() {
		return editor;
	}

	public void setEditor(IEditor editor) {
		this.editor = editor;
	}

	public AbstractAppModel getModel() {
		return model;
	}

	public void setModel(AbstractAppModel model) {
		this.model = model;
	}

	public ExportBth() {
		super();
		this.setBtnName("导出模板");
		this.setCode("BtnExport");
	}

	@Override
	public void doAction(ActionEvent event) {
		ExportTmpl();
	}

	/**
	 * 获得文件选择器
	 * 
	 * @author conn
	 * @return
	 * @return JFileChooser
	 * @date 2019-9-10
	 */
	public JFileChooser getChooser() {
		if (m_chooser == null) {
			m_chooser = new JFileChooser();
			m_chooser.setDialogType(JFileChooser.SAVE_DIALOG);
		}
		return m_chooser;
	}

	/**
	 * 导出Excel表格的方法
	 * 
	 * @author conn
	 * @param tp
	 * @return void
	 * @date 2019-9-10
	 */
	public void ExportTmpl() {
		String filePath = null;

		// 创建Excel文件对应的对象
		HSSFWorkbook hw = new HSSFWorkbook();
		BillCardPanel cp = ((BillForm) this.editor).getBillCardPanel();
		BillItem[] bodyItems = cp.getBodyShowItems();

		List<String> bodyList = new ArrayList<String>();

		// 过滤表体不需要的字段
		for (BillItem bodyItem : bodyItems) {
			String bodyColumName = bodyItem.getName();
			String bodyColumFiledName = bodyItem.getKey();
			if (bodyColumName.equals("集团") || bodyColumName.equals("组织") || bodyColumName.equals("组织版本")
					|| bodyColumName.equals("销售公司") || bodyColumName.equals("行号") || bodyColumName.equals("关闭人")
					|| bodyColumName.equals("关闭日期") || bodyColumName.equals("是否生效")) {
				continue;
			} else {
				bodyList.add(bodyColumName + "," + bodyColumFiledName);
			}
		}

		// 创建一个sheet表名 表明默认为功能名称+导入模板
		HSSFSheet hssfSheet = hw.createSheet(cp.getTitle() + "导入模板");
		// 通过sheet创建一盒row(行) 范围0-65535
		HSSFRow row1 = hssfSheet.createRow(0);
		// HSSFRow row2 = hssfSheet.createRow(1);

		// 通过row创建一个cell 一个cell就是一个单元格 范围0-255
		for (int i = 0; i < bodyList.size(); i++) {
			// 创建列
			HSSFCell col = row1.createCell(i);
			// 获得当前列应该填充的数据
			String cellvalue = bodyList.get(i);
			// 填充数据
			col.setCellValue(cellvalue);
			// 自适应列宽
			hssfSheet.setColumnWidth(i, hssfSheet.getColumnWidth(i) * 23 / 10);

			// 创建列样式
			HSSFCellStyle style = hw.createCellStyle();
			// 数据格式转换
			HSSFDataFormat format = hw.createDataFormat();
			// 如果字段中包含日期 则当前列单元格类型为日期类型
			if (cellvalue.contains("日期")) {
				style.setDataFormat(format.getFormat("yyyy-MM-dd"));

			} else {
				// 其余单元格为文本格式类型 方便导入操作
				style.setDataFormat(format.getFormat("@"));
			}
			// 该列单元格样式填充
			hssfSheet.setDefaultColumnStyle(i, style);
		}

		// 默认保存时文件名
		String title = ((BillForm) this.editor).getBillCardPanel().getTitle();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
		String date = simpleDateFormat.format(new Date());
		getChooser().setSelectedFile(new File(date + title + "导入模板"));

		// 打开保存模态框
		if (getChooser().showSaveDialog(tp) == JFileChooser.CANCEL_OPTION) {
			return;
		}
		// 获的输入框内的文件名及路径
		filePath = getChooser().getSelectedFile().toString();

		if (filePath == null) {
			MessageDialog.showHintDlg(tp, "警告", "请输入文件名保存!");
			return;
		}

		// 保存为xls格式
		if (filePath.indexOf(".xls") < 0) {
			filePath = filePath + ".xls";
		}

		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(filePath);
			hw.write(fos);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			ExceptionUtils.wrapException(new Exception(e.getMessage()));
		} catch (IOException e) {
			e.printStackTrace();
			ExceptionUtils.wrapException(new Exception(e.getMessage()));
		} finally {
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
				ExceptionUtils.wrapException(new Exception(e.getMessage()));
			}
		}
	}
}

XML中需要配置导出按钮

	
	<bean id="btnExport" class="nc.ui.tzsc.bs.action.ExportBth">
		<property name="model" ref="manageAppModel" />
		<property name="editor" ref="billFormEditor" />
	bean>


姓 名:Conn
邮 箱:[email protected]
如果我有帮助到你 帮忙点个赞 谢谢
如果有问题 请联系我 我会尽力帮助你


你可能感兴趣的:(yonyou)