`
Disney2002
  • 浏览: 53920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过Java生成Excel文件

阅读更多
package demo;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

public class ExcelExporter {
	private static JFileChooser fc;

	public ExcelExporter() {
	}

	//硬写,格式类似不是很严格,简单应用可以
	public void exportTable(JTable table, File file) throws IOException {
		TableModel model = table.getModel();
		FileWriter out = new FileWriter(file);

		for (int i = 0; i < model.getColumnCount(); i++) {
			out.write(model.getColumnName(i) + "\t");
		}
		out.write("\n");
		for (int i = 0; i < model.getRowCount(); i++) {
			for (int j = 0; j < model.getColumnCount(); j++) {
				out.write(model.getValueAt(i, j).toString() + "\t");
			}
			out.write("\n");
		}
		out.write("\n");
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date(System.currentTimeMillis());
		out.write("创建时间" + "\t" + format.format(date) + "\t");
		out.close();
		System.out.println("write out to: " + file);
	}

	// 通过POI写,用于较复杂的应用
	public void exportToExcel(JTable table, File file) throws IOException {
		TableModel model = table.getModel();

		HSSFWorkbook wb = new HSSFWorkbook();
		HSSFSheet sheet = wb.createSheet("统计信息");

		// 创建表格头
		HSSFRow row = sheet.createRow((short) 0);
		HSSFCellStyle headStyle = wb.createCellStyle();

		headStyle.setFillForegroundColor(HSSFColor.GREY_50_PERCENT.index); //添加前景色,内容看的清楚
		headStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		headStyle.setIndention((short) 10);

		HSSFFont font = wb.createFont();
		font.setColor(HSSFColor.BLUE.index);
		headStyle.setFont(font);

		for (int i = 0; i < model.getColumnCount(); i++) {
			HSSFCell cell = row.createCell((short) i);
			cell.setCellStyle(headStyle);
			cell.setCellValue(new HSSFRichTextString((model.getColumnName(i))));
		}
		// 插入表格数据
		for (int i = 0; i < model.getRowCount(); i++) {
			HSSFRow dataRow = sheet.createRow((short) i + 1);
			for (int j = 0; j < model.getColumnCount(); j++) {
				dataRow.createCell((short) j).setCellValue(
						new HSSFRichTextString(model.getValueAt(i, j)
								.toString()));
			}
		}

		// 插入创建时间
		HSSFRow insertTime = sheet.createRow((short) model.getRowCount() + 3);
		insertTime.createCell((short) 0).setCellValue(
				new HSSFRichTextString("创建时间"));
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date(System.currentTimeMillis());
		insertTime.createCell((short) 1).setCellValue(
				new HSSFRichTextString(format.format(date)));
		
               // 根据内容长度自动调整excel列宽
		for(int i=0;i<model.getColumnCount();i++){
			sheet.autoSizeColumn((short) i);
		}

		FileOutputStream fileOut = null;
		try {
			fileOut = new FileOutputStream(file.getAbsolutePath());
			wb.write(fileOut);
			fileOut.close();
		} catch (IOException e) {
			file.deleteOnExit();
			wb.write(fileOut);
			fileOut.close();
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		String[][] data = { { "Housewares", "$1275.00" },
				{ "Pets", "$125.00" }, { "Electronics", "$2533.00" },
				{ "Mensware", "$497.00" } };
		String[] headers = { "Department", "Daily Revenue" };

		final JFrame frame = new JFrame("JTable to Excel Hack");
		DefaultTableModel model = new DefaultTableModel(data, headers);
		final JTable table = new JTable(model);
		JScrollPane scroll = new JScrollPane(table);

		JButton export = new JButton("Export");
		fc = new JFileChooser();

		export.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				try {
					fc.addChoosableFileFilter(new ExcelFileFilter());
					fc.setAcceptAllFileFilterUsed(false);
					int returnVal = fc.showSaveDialog(frame);
					if (returnVal == JFileChooser.APPROVE_OPTION) {
						File file = fc.getSelectedFile();
						;
						String ext = ExcelFileFilter.getExtension(file);
						ExcelExporter exp = new ExcelExporter();
						if (ext != null) {
							if ((!ext.equals(ExcelFileFilter.xls))
									|| (!ext.equals(ExcelFileFilter.XLS))) {
								int i = file.getName().lastIndexOf(".");
								String fileName = file.getName()
										.substring(0, i);
								File newfile = new File(fc
										.getCurrentDirectory()
										.getAbsolutePath()
										+ "\\"
										+ fileName
										+ ExcelFileFilter.suffix);
								exp.exportToExcel(table, newfile);
								return;
							}
						} else {
							File newfile = new File(fc.getCurrentDirectory()
									.getAbsolutePath()
									+ "\\"
									+ file.getName()
									+ ExcelFileFilter.suffix);
							exp.exportToExcel(table, newfile);
							return;
						}

					} else {
					}

				} catch (IOException ex) {
					System.out.println(ex.getMessage());
					ex.printStackTrace();
				}
			}
		});

		frame.getContentPane().add("Center", scroll);
		frame.getContentPane().add("South", export);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}


外加一个Filter,直接保存为Excel格式,不支持office2007格式

/**
 * 
 */
package demo;

import java.io.File;

import javax.swing.filechooser.FileFilter;

/**
 * @author XiaoQuan
 * 
 */
public class ExcelFileFilter extends FileFilter {

	public final static String xls = "xls";
	public final static String XLS = "XLS";
	public final static String suffix = ".xls";

	public boolean accept(File file) {
		if (file.isDirectory()) {
			return true;
		}
		String extension = getExtension(file);
		if (extension != null) {
			if (extension.equals(ExcelFileFilter.xls)
					|| extension.equals(ExcelFileFilter.XLS)) {
				return true;
			} else {
				return false;
			}
		}
		return false;
	}

	public String getDescription() {
		return "保存为EXCEL";
	}

	public static String getExtension(File f) {
		String ext = null;
		String s = f.getName();
		int i = s.lastIndexOf('.');

		if (i > 0 && i < s.length() - 1) {
			ext = s.substring(i + 1).toLowerCase();
		}
		return ext;
	}

}




3
3
分享到:
评论
2 楼 pipihu_yu 2008-08-15  
HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. It does not support the new Excel 2007 .xlsx OOXML file format, which is not OLE2 based.
POI可以到[url] http://www.apache.org/dyn/closer.cgi/jakarta/poi/[/url] 下载。 编译好的jar主要有这样4个:poi包,poi Browser包,poi hdf包,poi hssf例程包。
1 楼 pipihu_yu 2008-08-15  
org.apache.poi.*包找不到哟!请问一下这是什么包呢?

相关推荐

    Java生成excel文件

    Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件

    Java生成Excel文件

    总之,Java生成Excel文件是通过Apache POI库实现的,它提供了丰富的API来创建、读取和修改Excel文件。通过学习和实践,我们可以熟练地运用这些工具,满足各种场景下的需求。对于初学者,可以从简单的例子开始,逐步...

    java生成excel图表

    "Java生成Excel图表" Java生成Excel图表是使用Java语言来生成Excel图表的过程。Excel图表是指使用Excel软件生成的图表,例如柱状图、折线图、饼状图等。Java语言可以使用各种库和框架来生成Excel图表,例如...

    java poi 根据excel模板生成excel文件

    通过以上步骤,你就可以利用Java POI库根据Excel模板生成新的Excel文件了。这个过程可以用于批量生成报告、自定义报表或者动态数据填充等场景,大大提高了工作效率。同时,POI库提供了丰富的API,可以根据具体需求...

    java 生成Excel文件

    在`StreamDemo_13.java`这个示例文件中,可能就包含了上述部分或全部步骤,演示了如何使用Java生成Excel文件的具体实现。配合`Java.jpg`这个图片文件,可能是为了说明如何在Excel中插入图片。 总之,通过Apache POI...

    java生成excel文件

    在java开发中,通过jxl.jar提供的api可以方便的生成你想要的excel文件。

    java生成excel

    Java 生成 Excel 文件并下载 Java 生成 Excel 文件是指使用 Java 语言生成 Excel 文件的过程。Excel 文件是一种常用的电子表格文件格式,广泛应用于数据存储和分析。在 Java 中,可以使用 Apache POI 库来生成 ...

    利用Java生成Excel文件

    利用Java生成Excel文件是一项常见的需求,特别是在数据处理和报表生成的场景中。Apache POI是一个强大的库,专门用于处理Microsoft Office格式的文件,包括Excel。本文将详细介绍如何使用Java和POI库生成Excel文件,...

    java用list直接生成Excel文件

    利用jxl包结合java反射机制和注释,直接把list生成对应的Excel文件,即只需传入list、对应生成的对象、标题就可以生成excel文件write(String title, List list,Class c),实现一个简单生成excel工具类

    java实现生成下载Excel

    生成Excel文件后,下一步是提供下载服务。这通常在Web应用程序中完成,例如基于Spring Boot的项目。我们需要创建一个Controller方法,返回一个`StreamingResponseBody`,通过HTTP响应将Excel文件发送到客户端: ```...

    Java代码生成Excel文件

    在Java编程中,生成Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据导出等场景。本篇文章将深入探讨如何使用Java代码来创建Excel文件,以满足上述需求。 首先,我们需要一个库来帮助我们处理Excel...

    java读取excel文件生成矩阵

    在Java编程中,读取Excel文件并生成矩阵是一项常见的任务,尤其在数据分析、报表处理或者数据导入导出的场景下。Excel文件通常用于存储结构化的表格数据,而矩阵则是一种有效的数据表示方式,便于计算和分析。下面...

    java 创建EXCEL文件,并向EXCEL中写入数据

    总的来说,Java配合`jxl`库可以方便地实现Excel文件的创建和数据写入,这对于数据导出、报告生成等场景非常实用。然而,需要注意的是,`jxl`库只支持旧版的.BIFF8格式(Excel 97-2003),对于新版的.xlsx格式(Excel...

    java 生成Excel,可根据模板格式生成 Excel打印专用 报表

    生成Excel报表时,你需要先创建一个Workbook对象,它是Excel文件的基础结构。 1. **创建Workbook对象**: - 对于.xlsx文件,可以使用`XSSFWorkbook()`构造函数创建`XSSFWorkbook`对象。 - 对于.xls文件,可以使用...

    Java POI根据模板生成Excel(xlsx)文件

    在本示例中,我们关注的是如何利用Java POI来根据模板生成.xlsx格式的Excel文件。这个过程涉及到对Excel模板的理解、读取、修改以及最终的保存。 首先,理解模板文件是关键。一个.xlsx模板文件实际上是由一系列XML...

    java实现生成Excel(默认.xls,可自己修改文件类型)文件程序

    java实现生成Excel(.xls)文件程序,并封装了从浏览器下载的方法,压缩包内含有使用说明,希望大神们指教,互相学习

    生成excel并上传至S3

    生成excel并上传到S3.不需要真正的生成excel文件,只需要拿到byte

    java绝对生成excel报表

    总结,Java生成Excel报表的过程涉及到文件I/O操作、使用第三方库(如JExcelApi)、创建和操作工作簿和工作表对象、设置单元格内容和样式等技术。通过熟练掌握这些知识点,你就能高效地在Java程序中生成各种复杂的...

    Java生成excel表格设置公式并填充数据

    Java编程调用PageOffice实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...

Global site tag (gtag.js) - Google Analytics