package nc.ui.fh.des.excel;
import java.io.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import java.util.Map.Entry;
import javax.swing.JFileChooser;
import javax.swing.JTable;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.pub.bill.BillItem;
import nc.ui.pub.report.ReportBaseClass;
import jxl.*;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;
/**
* 报表导出Excel的工具类
* @author 麻杰<br>
* @创建时间:2011-11-16 下午06:08:23
*/
public class ExportExcelReport {
protected static javax.swing.JFileChooser m_chooser = null;
protected static ReportBaseClass reportUIBase;
/**
* @author 麻杰<br>
* 日期:2011-11-17
* @param tp 父组件
* @param sheetName Excel页签名称
* @param istotal 是否合计
*/
public static void exportExcel(ReportBaseClass tp ,String sheetName,boolean istotal){
reportUIBase = tp;
String filePath = null;
if (getChooser().showSaveDialog(tp) == javax.swing.JFileChooser.CANCEL_OPTION) {
return;
}
filePath = getChooser().getSelectedFile().toString();
if (filePath == null) {
MessageDialog.showHintDlg(tp, "警告", "请输入文件名保存!");
return;
}
if (filePath.indexOf(".xls") < 0) {
filePath = filePath + ".xls";
}
boolean isSucceed = writeJxlByTableModel(filePath,sheetName,istotal);
if(isSucceed){
MessageDialog.showHintDlg(tp, "提示", "导出完成");
}else{
MessageDialog.showHintDlg(tp, "提示", "导出失败");
}
}
/**
* 生成Excel文件
* @author 麻杰<br>
* 日期:2011-11-17
* @param filePatch
* @param sheetName
* @param istotal 是否合计
* @return
*/
public static boolean writeJxlByTableModel(String filePath,String sheetName,boolean istotal) {
JTable table = reportUIBase.getBillTable();
if (table == null || table.getRowCount() <= 0)
return false;
WritableWorkbook writableWorkbook = null;
OutputStream os = null;
try {
os = new FileOutputStream(filePath);
// 创建可写簿
writableWorkbook = Workbook.createWorkbook(os);
// 创建工作表
WritableSheet ws = writableWorkbook.createSheet(sheetName, 0);
// 创建一个内容 第一个整数为 列,第二个整数位 行
Label label = null;
int rows = table.getRowCount();
int cols = table.getColumnCount();
for (int row = 0; row < rows + 1; row++) {
for (int col = 0; col < cols ; col++) {
if(row == 0){
String headerName = table.getTableHeader().getColumnModel().getColumn(col).getHeaderValue() == null ? "" :
table.getTableHeader().getColumnModel().getColumn(col).getHeaderValue().toString();
label = new Label(col,row,headerName,getHeaderFormat());
ws.addCell(label);
ws.setColumnView(col, headerName == null ? 10 : (headerName.length() > 2 ? headerName.length()*3 : headerName.length()*6));
}
label = new Label(col,row+1,table.getValueAt(row, col) == null ? "" : table.getValueAt(row, col).toString());
if(label.getContents() != null){
if(label.getContents().equals("false")){
label.setString("N");
}else if(label.getContents().equals("true")){
label.setString("Y");
}
}
ws.addCell(label);
}
}
if(istotal){
//添加合计行
Map<Integer,String> map = getTotalMap();
if(map != null && map.size()>0){
Set<Entry<Integer,String>> set = map.entrySet();
Iterator it = set.iterator();
while(it.hasNext()){
Entry<Integer,String> entry = (Entry<Integer, String>) it.next();
label = new Label(entry.getKey(),rows+1,entry.getValue());
ws.addCell(label);
}
}
}
writableWorkbook.write();
} catch (IOException e) {
e.printStackTrace();
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
} finally {
if(writableWorkbook != null){
try {
writableWorkbook.close();
} catch (WriteException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
if(os != null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
/**
* 获得文件选择器
* @author 麻杰<br>
* 日期:2011-11-17
* @return
*/
private static javax.swing.JFileChooser getChooser() {
if (m_chooser == null) {
m_chooser = new JFileChooser();
m_chooser.setDialogType(JFileChooser.SAVE_DIALOG);
}
return m_chooser;
}
/**
* 获得表头行样式
* @author 麻杰<br>
* 日期:2011-11-16
* @throws WriteException
*/
private static WritableCellFormat getHeaderFormat() throws WriteException{
WritableFont font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false);
WritableCellFormat format = new WritableCellFormat(font);
format.setWrap(false);
format.setAlignment(Alignment.CENTRE);//水平方向剧中
format.setVerticalAlignment(VerticalAlignment.CENTRE);
return format;
}
/**
* 获得合计封装Map
* @author 麻杰<br>
* 日期:2011-11-18
* @return
*/
private static Map<Integer,String> getTotalMap(){
Vector vector = (Vector)reportUIBase.getTotalTableModel().getDataVector().get(0);
Object total = null;
Map<Integer,String> map = new HashMap<Integer,String>();
for(int i=0;i<vector.size();i++){
total = vector.get(i);
if(total != null){
int result = getOrder(i);
if(result != -1){
map.put(result, total.toString());
}
}
}
return map;
}
/**
* 根据合计值的位置获得其在UITable中的位置
* @author 麻杰<br>
* 日期:2011-11-18
* @param num
* @return
*/
private static Integer getOrder(int num){
int result = 0;
BillItem[] billItem = reportUIBase.getBodyItems();
if(!billItem[num].isShow()){
return -1;
}
for(int i=0;i<num;i++){
if(billItem[i].isShow()){
result++;
}
}
return result;
}
}
相关推荐
对于NC65 、NC57 开发标准的Excel导入导出功能,以及需要改造导出模板的情况的开发方案
NC脚本导出工具.exe
uap平台(nc65),实现导入excel的方法代码,仅供参考
3. 数据共享与报告:报表结果可以导出为Excel、PDF等多种格式,方便共享和打印,也可以制作成图表展示,提升报告的可视化效果。 五、最佳实践与注意事项 1. 规划好报表体系:根据企业的组织结构和业务流程,合理...
NC5系列单据报表开发工具NC5系列单据报表开发工具NC5系列单据报表开发工具
### NC报表开发_数据加工示例 在NC报表开发中,数据加工是构建报表语义模型的核心步骤之一。本文将详细介绍如何通过不同的数据加工方式来实现报表开发,并以具体的示例代码来展示整个过程。 #### 报表语义模型与...
1. 报表导出:用户可以根据需要选择要导出的报表,例如利润表、资产负债表、现金流量表等,并选择相应的数据格式,如Excel、CSV、PDF等。 2. 查询导出:用户可以根据需要选择要导出的数据字段和条件,例如选择特定的...
【标题】"用友NC报表全套开发教程"涵盖了企业信息化管理中的一个重要领域——报表系统开发。用友NC(U8)是一款大型的企业资源计划(ERP)软件,其报表模块是核心功能之一,为企业提供数据统计、分析及决策支持。本...
NC63脚本导出工具,可以导出元数据脚本,。。。。。。。。。
《NC报表联查单据教程》 本教程主要聚焦于用友NC系统的报表联查功能,特别是如何从分组表联查到销售报价单。在用友NC系统中,报表联查是一项重要的功能,它允许用户从一个报表的明细数据出发,深入查看相关的上游...
该工具支持导出NC节点的数据库脚本,方便二开开发人员快速抽取节点脚本
在企业信息化管理中,用友NC65是一款强大的企业资源规划系统,其报表功能是企业数据分析和决策的重要工具。在NC65中,创建内部报表的过程涉及到多个步骤,包括数据源配置、语义模型构建、报表设计以及权限分配。下面...
NC65解除训练盘不允许导出报表的限制
尤其是在企业级应用系统中,如NC65这样的企业管理软件,UAP(通用应用平台)提供了标准化的导入导出功能,使得数据管理更为高效便捷。本文将深入解析UAP标准导入导出功能的相关处理规则、基本操作示例及其拓展应用。...
**步骤24:** 在“总账”-“凭证管理”-“制单”界面中,点击“新增”-“科目”,使用放大镜工具浏览会计科目,如果案例中有多个科目,则都需要导出。并将这些科目的编码和辅助核算品名粘贴到科目表的相应位置以备后...
在介绍NC65导出jar文件的过程中,需要掌握的知识点涵盖了整个软件开发和部署的关键步骤。以下是从标题、描述、标签以及部分内容中提炼出的详细知识点: 1. **导出jar文件的操作流程**: - 首先需要在NC65环境中...
使用`ucar.nc2.NetcdfFile`类来打开和关闭NetCDF文件。以下是一个简单的示例: ```java try (NetcdfFile netcdfFile = NetcdfFile.open("path_to_your_file.nc")) { // 在这里处理文件 } catch (IOException e...
2. 分页与导出:掌握如何设置分页,以及将报表导出为PDF、Excel等格式,方便离线查看和分享。 3. 针对性的权限控制:了解如何设置用户访问权限,以保护敏感信息,并确保每个用户只能看到他们有权查看的报表。 四、...
NC自由报表开发手册.pdf NC自由报表开发手册.pdf是关于报表开发的教学指南,该手册旨在帮助中级以上顾问熟悉NCV65的报表平台,掌握复杂报表开发的技术。以下是手册中所涉及的知识点: 1. 报表应用存在的实际问题:...