因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
邮 箱:tzconn@163.com
如果我有帮助到你 帮忙点个赞 谢谢
如果有问题 请联系我 我会尽力帮助你