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.ToftPanel;
import nc.ui.pub.beans.UITable;
import nc.ui.pub.bill.BillItem;
import nc.ui.pub.bill.BillListPanel;
import jxl.*;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;
/**
* 导出Excel的工具类
* @author 麻杰<br>
* @创建时间:2011-11-16 下午06:08:23
*/
public class BillListExportExcel {
protected static javax.swing.JFileChooser m_chooser = null;
protected static BillListPanel billListPanel = null;
/**
* @author 麻杰<br>
* 日期:2011-11-17
* @param tp 父组件
* @param sheetName Excel页签名称
* @param BillListPanel bill
* @param istotal 是否合计
*/
public static void exportExcel(ToftPanel tp ,String sheetName,BillListPanel bill,boolean istotal){
billListPanel = bill;
String filePath = null;
if (getChooser().showSaveDialog(tp) == javax.swing.JFileChooser.CANCEL_OPTION) {
return;
}
filePath = getChooser().getSelectedFile().toString();
if (filePath == null) {
tp.showHintMessage("请输入文件名保存!");
return;
}
if (filePath.indexOf(".xls") < 0) {
filePath = filePath + ".xls";
}
boolean isSucceed = writeJxlByTableModel(filePath,sheetName,istotal);
if(isSucceed){
tp.showWarningMessage("导出完成");
}else{
tp.showWarningMessage("导出失败");
}
}
/**
* 生成Excel文件
* @author 麻杰<br>
* 日期:2011-11-17
* @param filePatch
* @param sheetName
* @param istotal 是否合计
* @return
*/
public static boolean writeJxlByTableModel(String filePath,String sheetName,boolean istotal) {
UITable table = billListPanel.getHeadTable();
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)billListPanel.getHeadBillModel().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 = billListPanel.getHeadBillModel().getBodyItems();
if(!billItem[num].isShow()){
return -1;
}
for(int i=0;i<num;i++){
if(billItem[i].isShow()){
result++;
}
}
return result;
}
}
相关推荐
java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。
概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...
导出excel工具类
在IT行业中,导出Excel工具类是经常被用于数据处理和报告生成的场景。这个工具类通常包含了多种方法,能够方便地将程序中的数据结构转换为Excel格式的文件,便于用户下载、查看或进一步分析。这里我们将深入探讨导出...
一个实用的java导入导出Excel工具类,基于开源的Java Excel API(JXL)纯java类库实现,Windows和Linux系统下均可使用。 主要实现功能如下: 导出:将List转化为Excel(listToExcel)。 导入:将Excel转化为List...
EasyUIPoI是一款基于Apache POI的Java工具库,专门用于简化Excel的导出操作,尤其在处理模板和合并单元格方面提供了便利。这个库主要适用于那些需要在Web应用中生成Excel报告或导出数据的场景,比如数据分析、报表...
为了方便开发者将程序中的数据快速导出到Excel文件,自定义Excel导出工具类是常见的做法。本篇文章将深入探讨如何利用Java的Apache POI库创建一个能够处理`List<Object>`数据的Excel工具类。 Apache POI是一个流行...
java的poi的导入工具类,只需要传入两个arrayList,一个是execl的标题,一个是ececl的数据,就可以直接导出到execl里面,支持最新的execl,全新封装的,让每一个人都会使用poi导出execl!
本文将详细介绍如何使用`jxl`库创建一个导出Excel的工具类,以及这个工具类如何帮助我们简化代码,提高效率。 首先,`jxl`库提供了对Excel文件的读写支持,包括工作簿(Workbook)、工作表(Worksheet)、行(Row)...
* 导出excel(利用反射机制) * String[] title = {"订单号","商品名称","商品价格","创建时间"}; * String[] field = {"orderNum","productName","productPrice","createTime"}; * ExportTools.export("sellJoin...
java Excel工具类,导入导出Excel数据,导入数据对合并表格有判断获取数据,导出数据到Excel,Excel文件不存在会创建。 博客:https://blog.csdn.net/qq_37902949/article/details/81230640
在本篇文章中,我们将深入探讨如何使用ITEXT来创建Excel工具类,以便在Java应用程序中方便地导出数据到Excel格式。 首先,我们需要理解ITEXT并不直接支持Excel格式。但我们可以利用ITEXT的`PdfWriter`和`Document`...
在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...
总结,EasyUI的datagrid导出Excel工具类为开发者提供了一种便捷的方式,通过前后端配合,将网页中的数据快速转换成Excel文件,满足了用户对数据管理的需求。在实际应用中,需要注意数据安全和性能优化,确保功能的...
这里我们讨论的“导入导出excel工具类”是一个专门处理这些任务的Java代码库,它可能包含一系列预定义的方法和逻辑,帮助开发者高效地与Excel文件进行交互。下面将详细阐述相关的知识点: 1. **Java API for Excel...
至于压缩包文件中的"newExcel",可能是包含了一个示例Excel文件,供用户测试工具类的功能,或者是一个例子,展示了如何使用该工具类进行实际操作。在测试或学习时,可以使用这个文件进行导入和导出的实践操作。
本篇文章将深入探讨“C#通用Excel导入导出工具类”的实现原理及应用,主要涉及的技术点包括反射、特性以及如何创建一个高效的Excel导入导出解决方案。 首先,我们要理解反射在C#中的作用。反射是一种强大的机制,它...
这样的工具类使得在项目中导入导出Excel变得简单易行,只需调用相应的静态方法即可完成大部分工作。 在实际应用中,还可能需要处理其他细节,比如数据类型转换、样式设置、日期格式化、合并单元格等。同时,考虑到...