-
Java POI 导出Excel经典实现 导出Excel弹出下载框 Spring Boot【不定期更新】
2012-03-08 13:45:33在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的... 呵呵,首先我们来导出EXCEL格式的文件吧。现在主流的操作Ex...在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下。(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^)
呵呵,首先我们来导出EXCEL格式的文件吧。现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI。这里我们用Apache POI!我们先去Apache的大本营下载POI的jar包:http://poi.apache.org/ ,我这里使用的是3.0.2版本。
将3个jar包导入到classpath下,什么?忘了怎么导包?不会吧!好,我们来写一个导出Excel的实用类(所谓实用,是指基本不用怎么修改就可以在实际项目中直接使用的!)。我一直强调做类也好,做方法也好,一定要通用性和灵活性强。下面这个类就算基本贯彻了我的这种思想。那么,熟悉许老师风格的人应该知道,这时候该要甩出一长串代码了。没错,大伙请看:
public class Student { private long id; private String name; private int age; private boolean sex; private Date birthday; // Constructor, Getter and Setter... }
public class Book { private int bookId; private String name; private String author; private float price; private String isbn; private String pubName; private byte[] preface; // Constructor, Getter and Setter... }
上面这两个类一目了然,就是两个简单的javabean风格的类。再看下面真正的重点类:
public class ExportExcel<T> { public void exportExcel(Collection<T> dataset, OutputStream out) { exportExcel("测试POI导出EXCEL文档", null, dataset, out, "yyyy-MM-dd"); } public void exportExcel(String[] headers, Collection<T> dataset, OutputStream out) { exportExcel("测试POI导出EXCEL文档", headers, dataset, out, "yyyy-MM-dd"); } public void exportExcel(String[] headers, Collection<T> dataset, OutputStream out, String pattern) { exportExcel("测试POI导出EXCEL文档", headers, dataset, out, pattern); } /** * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上 * * @param title * 表格标题名 * @param headers * 表格属性列名数组 * @param dataset * 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的 * javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据) * @param out * 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * @param pattern * 如果有时间数据,设定输出格式。默认为"yyy-MM-dd" */ @SuppressWarnings("unchecked") public void exportExcel(String title, String[] headers, Collection<T> dataset, OutputStream out, String pattern) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字节 sheet.setDefaultColumnWidth((short) 15); // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); // 生成并设置另一个样式 HSSFCellStyle style2 = workbook.createCellStyle(); style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index); style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style2.setBorderBottom(HSSFCellStyle.BORDER_THIN); style2.setBorderLeft(HSSFCellStyle.BORDER_THIN); style2.setBorderRight(HSSFCellStyle.BORDER_THIN); style2.setBorderTop(HSSFCellStyle.BORDER_THIN); style2.setAlignment(HSSFCellStyle.ALIGN_CENTER); style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 生成另一个字体 HSSFFont font2 = workbook.createFont(); font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 style2.setFont(font2); // 声明一个画图的顶级管理器 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); // 定义注释的大小和位置,详见文档 HSSFComment comment = patriarch.createComment(new HSSFClientAnchor( 0, 0, 0, 0, (short) 4, 2, (short) 6, 5)); // 设置注释内容 comment.setString(new HSSFRichTextString("可以在POI中添加注释!")); // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容. comment.setAuthor("leno"); // 产生表格标题行 HSSFRow row = sheet.createRow(0); for (short i = 0; i < headers.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } // 遍历集合数据,产生数据行 Iterator<T> it = dataset.iterator(); int index = 0; while (it.hasNext()) { index++; row = sheet.createRow(index); T t = (T) it.next(); // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 Field[] fields = t.getClass().getDeclaredFields(); for (short i = 0; i < fields.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(style2); Field field = fields[i]; String fieldName = field.getName(); String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); try { Class tCls = t.getClass(); Method getMethod = tCls.getMethod(getMethodName, new Class[] {}); Object value = getMethod.invoke(t, new Object[] {}); // 判断值的类型后进行强制类型转换 String textValue = null; // if (value instanceof Integer) { // int intValue = (Integer) value; // cell.setCellValue(intValue); // } else if (value instanceof Float) { // float fValue = (Float) value; // textValue = new HSSFRichTextString( // String.valueOf(fValue)); // cell.setCellValue(textValue); // } else if (value instanceof Double) { // double dValue = (Double) value; // textValue = new HSSFRichTextString( // String.valueOf(dValue)); // cell.setCellValue(textValue); // } else if (value instanceof Long) { // long longValue = (Long) value; // cell.setCellValue(longValue); // } if (value instanceof Boolean) { boolean bValue = (Boolean) value; textValue = "男"; if (!bValue) { textValue = "女"; } } else if (value instanceof Date) { Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat(pattern); textValue = sdf.format(date); } else if (value instanceof byte[]) { // 有图片时,设置行高为60px; row.setHeightInPoints(60); // 设置图片所在列宽度为80px,注意这里单位的一个换算 sheet.setColumnWidth(i, (short) (35.7 * 80)); // sheet.autoSizeColumn(i); byte[] bsValue = (byte[]) value; HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255, (short) 6, index, (short) 6, index); anchor.setAnchorType(2); patriarch.createPicture(anchor, workbook .addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG)); } else { // 其它数据类型都当作字符串简单处理 textValue = value.toString(); } // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成 if (textValue != null) { Pattern p = Pattern.compile("^//d+(//.//d+)?$"); Matcher matcher = p.matcher(textValue); if (matcher.matches()) { // 是数字当作double处理 cell.setCellValue(Double.parseDouble(textValue)); } else { HSSFRichTextString richString = new HSSFRichTextString( textValue); HSSFFont font3 = workbook.createFont(); font3.setColor(HSSFColor.BLUE.index); richString.applyFont(font3); cell.setCellValue(richString); } } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } finally { // 清理资源 } } } try { workbook.write(out); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { // 测试学生 ExportExcel<Student> ex = new ExportExcel<Student>(); String[] headers = { "学号", "姓名", "年龄", "性别", "出生日期" }; List<Student> dataset = new ArrayList<Student>(); dataset.add(new Student(10000001, "张三", 20, true, new Date())); dataset.add(new Student(20000002, "李四", 24, false, new Date())); dataset.add(new Student(30000003, "王五", 22, true, new Date())); // 测试图书 ExportExcel<Book> ex2 = new ExportExcel<Book>(); String[] headers2 = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN", "图书出版社", "封面图片" }; List<Book> dataset2 = new ArrayList<Book>(); try { BufferedInputStream bis = new BufferedInputStream( new FileInputStream("V://book.bmp")); byte[] buf = new byte[bis.available()]; while ((bis.read(buf)) != -1) { // } dataset2.add(new Book(1, "jsp", "leno", 300.33f, "1234567", "清华出版社", buf)); dataset2.add(new Book(2, "java编程思想", "brucl", 300.33f, "1234567", "阳光出版社", buf)); dataset2.add(new Book(3, "DOM艺术", "lenotang", 300.33f, "1234567", "清华出版社", buf)); dataset2.add(new Book(4, "c++经典", "leno", 400.33f, "1234567", "清华出版社", buf)); dataset2.add(new Book(5, "c#入门", "leno", 300.33f, "1234567", "汤春秀出版社", buf)); OutputStream out = new FileOutputStream("E://a.xls"); OutputStream out2 = new FileOutputStream("E://b.xls"); ex.exportExcel(headers, dataset, out); ex2.exportExcel(headers2, dataset2, out2); out.close(); out2.close(); JOptionPane.showMessageDialog(null, "导出成功!"); System.out.println("excel导出成功!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
写完之后,如果您不是用eclipse工具生成的Servlet,千万别忘了在web.xml上注册这个Servelt。而且同样的,拷贝一张小巧的图书图片命名为book.jpg放置到当前WEB根目录的/WEB-INF/下。部署好web工程,用浏览器访问Servlet看下效果吧!是不是下载成功了。呵呵,您可以将下载到本地的excel报表用打印机打印出来,这样您就大功告成了。完事了我们就思考:我们发现,我们做的方法,不管是本地调用,还是在WEB服务器端用Servlet调用;不管是输出学生列表,还是图书列表信息,代码都几乎一样,而且这些数据我们很容器结合后台的DAO操作数据库动态获取。恩,类和方法的通用性和灵活性开始有点感觉了。好啦,祝您学习愉快!
Java导出Excel弹出下载框
将ExportExcel类的main方法改成public void test(),OutputStream out = new FileOutputStream("E://a.xls");这边可以对应Servlet适当改下路径,Servlet代码如下:
public class ExcelServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { (new ExportExcel()).test(); String str = "a.xls"; //String path = request.getSession().getServletContext().getRealPath(str); download("E://a.xls", response); } private void download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径。 File file = new File(path); // 取得文件名。 String filename = file.getName(); // 以流的形式下载文件。 InputStream fis = new BufferedInputStream(new FileInputStream(path)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); // 设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes())); response.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream( response.getOutputStream()); response.setContentType("application/vnd.ms-excel;charset=gb2312"); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
补充:
于2014-08-28补充
今天(20140828)用博文中的代码重新调试了下,献上Java POI 导入导出Excel简单小例子一枚,方便你我。
源代码下载地址:http://download.csdn.net/detail/evangel_z/7834173
注:
1)源代码是不含jar包的,jar包可以去本文补充部分下边的链接中下载,本地测试例子中所使用的所有jar包如下:
2)直接使用该例子源代码的话,需要在E盘下放置一张名为book的png格式图片(book.png),用于导出含有图片的excel文件(b.xls)。当然,您可以根据实际需要更换代码中的图片路径;
3)使用本文源代码正常启动服务器后,web页面导出Excel文档具体路径:http://localhost:8080/poi/export
4)例子代码比较简单,仅供参考……
于2014-12-02补充
前段时间,在之前代码的基础上,抽空改了改代码,具体如下:
1)去除图片和Excel文件未找到的bug;
2)增加代码需要的jar包;
3)完整代码已放在github上……
最新代码下载地址:https://github.com/T5750/poi
于2015-01-13补充
由于不少热心网友问读取Excel模版导出相关问题,故今晚在之前代码的基础上,临时加了些代码,具体如下:
1)新增使用POI读取Excel模版的例子,模版为poi/WebContent/docs/replaceTemplate.xls;
2)在poi/src/replace/TestExcelReplace类中,请根据实际情况,调整读取和保存Excel的路径后,直接运行即可;
最新代码下载地址不变,先到这里,抽空再优化……
于2015-01-24补充
前段时间,在之前代码的基础上,增加了种读取Excel模版导出的方式。今天,抽空改了改说明,具体如下:
1)在poi/src/replace包中,新增上次补充里POI读取Excel模版的ReplaceExcelServlet.java,供web页面使用;
2)在poi/src/template包中,增加了种读取Excel模版导出的方式,其对应的模版为poi/WebContent/docs/template.xls。请根据实际情况,调整读取和保存Excel的路径后,直接运行TestTemplate.java即可。TemplateServlet.java则对应web页面使用;
最新代码下载地址不变……
于2015-01-31补充
昨晚,在之前代码的基础上,加上本文中可直接运行导出Excel的代码。具体如下:
1)在poi/src/testExport包中,TestExportExcel.java,链接地址:https://github.com/T5750/poi/blob/master/src/testExport/TestExportExcel.java
最新代码下载地址不变……
于2015-02-10补充
在之前代码的基础上,加上可以通过POI导出Excel2007的例子。具体如下:
1)在poi/src/testExport包中,TestExportExcel2007.java,链接地址:https://github.com/T5750/poi/blob/master/src/testExport/TestExportExcel2007.java
于2015-02-12补充
今天,在之前代码的基础上,抽空改了改代码。具体如下:
1)在poi/src/testExport包中,新增Excel2007Servlet.java。以及,修改相关配置;
2)在poi/src/testExport包中,对导出Excel文件进行重命名,便于查看;
3)更新该poi例子对应的帮助文档。
于2019-07-23补充
Servlet -> Spring Boot
相关文章&官方文档&源代码下载地址:
Java POI读取Office Excel (2003,2007)及相关jar包 Spring Boot
最新官方文档:https://poi.apache.org/apidocs/index.html
源代码下载地址:http://download.csdn.net/detail/evangel_z/7834173
最新代码下载地址:https://github.com/T5750/poi -
js 实现纯前端将数据导出excel两种方式,亲测有效
2018-05-23 14:33:27由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,参考了好多资料以及很多大佬写的博客终于实现,兼容chrome没问题,其他还没有测试过,这边介绍两种实现方式,并附上代码和gif动图,博主...由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,参考了好多资料以及很多大佬写的博客终于实现,兼容chrome没问题,其他还没有测试过,这边介绍两种实现方式,并附上代码和gif动图,博主不才还望轻喷,代码可直接copy运行
如果文章对你有帮助,关注下我的公众号,二维码在下方,这是对我最好的支持,感恩
方法一
将table标签,包括tr、td等对json数据进行拼接,将table输出到表格上实现,这种方法的弊端在于输出的是伪excel,虽说生成xls为后缀的文件,但文件形式上还是html,代码如下
<html> <head> <p style="font-size: 20px;color: red;">使用table标签方式将json导出xls文件</p> <button onclick='tableToExcel()'>导出</button> </head> <body> <script> const tableToExcel = () => { // 要导出的json数据 const jsonData = [ { name:'路人甲', phone:'123456', email:'123@123456.com' }, { name:'炮灰乙', phone:'123456', email:'123@123456.com' }, { name:'土匪丙', phone:'123456', email:'123@123456.com' }, { name:'流氓丁', phone:'123456', email:'123@123456.com' }, ] // 列标题 let str = '<tr><td>姓名</td><td>电话</td><td>邮箱</td></tr>'; // 循环遍历,每行加入tr标签,每个单元格加td标签 for(let i = 0 ; i < jsonData.length ; i++ ){ str+='<tr>'; for(const key in jsonData[i]){ // 增加\t为了不让表格显示科学计数法或者其他格式 str+=`<td>${ jsonData[i][key] + '\t'}</td>`; } str+='</tr>'; } // Worksheet名 const worksheet = 'Sheet1' const uri = 'data:application/vnd.ms-excel;base64,'; // 下载的表格模板数据 const template = `<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet> <x:Name>${worksheet}</x:Name> <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet> </x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--> </head><body><table>${str}</table></body></html>`; // 下载模板 window.location.href = uri + base64(template); }; // 输出base64编码 const base64 = s => window.btoa(unescape(encodeURIComponent(s))); </script> </body> </html>
如图:
方法二
通过将json遍历进行字符串拼接,将字符串输出到csv文件,代码如下
<html> <head> <p style="font-size: 20px;color: red;">使用a标签方式将json导出csv文件</p> <button onclick='tableToExcel()'>导出</button> </head> <body> <script> const tableToExcel = () => { // 要导出的json数据 const jsonData = [ { name:'路人甲', phone:'123456789', email:'000@123456.com' }, { name:'炮灰乙', phone:'123456789', email:'000@123456.com' }, { name:'土匪丙', phone:'123456789', email:'000@123456.com' }, { name:'流氓丁', phone:'123456789', email:'000@123456.com' }, ]; // 列标题,逗号隔开,每一个逗号就是隔开一个单元格 let str = `姓名,电话,邮箱\n`; // 增加\t为了不让表格显示科学计数法或者其他格式 for(let i = 0 ; i < jsonData.length ; i++ ){ for(const key in jsonData[i]){ str+=`${jsonData[i][key] + '\t'},`; } str+='\n'; } // encodeURIComponent解决中文乱码 const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str); // 通过创建a标签实现 const link = document.createElement("a"); link.href = uri; // 对下载的文件命名 link.download = "json数据表.csv"; link.click(); } </script> </body> </html>
如图:
这里是我创建的一个QQ群,用来给前端萌新解决问题的,有兴趣的可以加一下
这是我的公众号,可以看更多优质文章哦,公众号刚建不久希望大家多多支持我一下,我也会努力更新更多好文章的 😊
参考了很多大佬的博客其中这两篇对我启发最大,感谢!
https://blog.csdn.net/oscar999/article/details/16342699
https://blog.csdn.net/aa122273328/article/details/50388673我的github:https://github.com/hhzzcc
-
Java POI 导入导出Excel简单实例源代码
2014-08-28 16:25:39Java POI 导入导出Excel简单实例源代码 该源代码的jar包,参见以下博文附录截图 Java POI导出EXCEL经典实现 Java导出Excel弹出下载框 http://blog.csdn.net/evangel_z/article/details/7332535 web页面导出Excel... -
C# 使用 C# Aspose.Cells导出多个Sheet的Excel .net导出Excel C#导出Excel
2016-10-10 15:51:28C# 使用 C# Aspose.Cells导出多个Sheet的Excel .net导出Excel C#导出Excel在我博客 资源里面可以免费下载绿色版的Aspose.cells 插件 破解的 public static void MydataTest() { //打开保存的位置 FolderBrowserDialog BrowDialog = new FolderBrowserDialog(); BrowDialog.ShowNewFolderButton = true; BrowDialog.Description = "请选择Excel保存位置"; if (BrowDialog.ShowDialog() == DialogResult.OK) { try { string MYpath = BrowDialog.SelectedPath; Workbook workbook = new Workbook(); //清除页先 要不然 新建就有一个sheet workbook.Worksheets.Clear(); #region 样式 //为标题设置样式 Style styleTitle = workbook.Styles[workbook.Styles.Add()];//新增样式 styleTitle.HorizontalAlignment = TextAlignmentType.Center;//文字居中 styleTitle.Font.Name = "宋体";//文字字体 styleTitle.Font.Size = 18;//文字大小 styleTitle.Font.IsBold = true;//粗体 //样式2 Style style2 = workbook.Styles[workbook.Styles.Add()];//新增样式 style2.HorizontalAlignment = TextAlignmentType.Center;//文字居中 style2.Font.Name = "宋体"; style2.Font.Size = 14; style2.Font.IsBold = true; style2.IsTextWrapped = true;//单元格内容自动换行 style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //样式3 Style style3 = workbook.Styles[workbook.Styles.Add()]; style3.HorizontalAlignment = TextAlignmentType.Center; style3.Font.Name = "宋体"; style3.Font.Size = 12; style3.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; style3.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; style3.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; style3.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; #endregion //中文列名 DataTable tblDatas = new DataTable(); tblDatas.Columns.Add("Name", Type.GetType("System.String")); tblDatas.Rows.Add(new object[] { "购买日期" }); tblDatas.Rows.Add(new object[] { "质保时间" }); tblDatas.Rows.Add(new object[] { "报废日期" }); tblDatas.Rows.Add(new object[] { "厂家" }); tblDatas.Rows.Add(new object[] { "厂家联系人" }); tblDatas.Rows.Add(new object[] { "厂家联系电话" }); tblDatas.Rows.Add(new object[] { "备注" }); //保存的路径 string path = System.IO.Path.Combine(MYpath, "资产报表" + DateTime.Now.ToString("yyyy-MM-dd").Trim() + ".xls"); //我的数据 就是Sheet名字 DataTable AssetModelName ="你的Sheet名字"; //生成sheet的名字 for (int i = 0; i < AssetModelName.Rows.Count; i++) { workbook.Worksheets.Add("页" + (i + 1).ToString() + "-" + AssetModelName.Rows[i]["AssetModelName"].ToString().Trim()); } //有多少sheet 就遍历多少次 for (int j = 0; j < AssetModelName.Rows.Count; j++) { //dt 就是你每个sheet的数据 DataTable dt = //使用DataTable对象 去查询你表格的数据 Worksheet sheet0 = workbook.Worksheets[j]; Cells cells = sheet0.Cells;//单元格 if (dt != null) { int Colnum = dt.Columns.Count;//表格列数 int Rownum = dt.Rows.Count;//表格行数 cells.Merge(0, 0, 1, Colnum);//合并单元格//生成行1 标题行 cells[0, 0].PutValue(AssetModelName.Rows[j]["AssetModelName"].ToString().Trim());//填写内容 cells[0, 0].SetStyle(styleTitle); cells.SetRowHeight(0, 38); //生成行2 列名行 就是 for (int i = 0; i < Colnum; i++) { cells[1, i].PutValue(tblDatas.Rows[i]["Name"]); cells[1, i].SetStyle(style2); } cells.SetRowHeight(1, 30);//设置第一行行高 //设置列宽 cells.SetColumnWidth(0, 22); cells.SetColumnWidth(14, 22); //生成数据行 for (int i = 0; i < Rownum; i++) { for (int k = 0; k < Colnum; k++) { cells[2 + i, k].PutValue(dt.Rows[i][k].ToString()); cells[2 + i, k].SetStyle(style3); } cells.SetRowHeight(2 + i, 17); } } } workbook.Save(path); Process.Start(path); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }
使用 Aspose.Cells导出多个Sheet的Excel
在我博客 资源里面可以免费下载绿色版的Aspose.cells 插件 破解的
使用 Aspose.Cells导出多个Sheet的Excel
在我博客 资源里面可以免费下载绿色版的Aspose.cells 插件 破解的
-
js导出EXCEL js导出EXCEL
2012-09-19 15:03:38参考一:... 参考二: js导出EXCEL js导出EXCEL //导出excel function exportExcel(DivID){ //先声明Excel插件、Excel工作簿等对像 var jXls, myWorkbook, myWorksheet;参考一:http://wenku.baidu.com/view/7b81f3eb6294dd88d0d26b57.html
参考二:
js导出EXCEL js导出EXCEL
<html>
<body>
<script language="javascript">
//导出excel
function exportExcel(DivID){//先声明Excel插件、Excel工作簿等对像
var jXls, myWorkbook, myWorksheet;
try {
//插件初始化失败时作出提示
jXls = new ActiveXObject('Excel.Application');
}catch (e) {
alert("无法启动Excel!\n\n如果您确信您的电脑中已经安装了Excel,"+"那么请调整IE的安全级别。\n\n具体操作:\n\n"+"工具 → Internet选项 → 安全 → 自定义级别 → 对没有标记为安全的ActiveX进行初始化和脚本运行 → 启用");
return false;
}
//不显示警告
jXls.DisplayAlerts = false;
//创建AX对象excel
myWorkbook = jXls.Workbooks.Add();
//myWorkbook.Worksheets(3).Delete();//删除第3个标签页(可不做)
//myWorkbook.Worksheets(2).Delete();//删除第2个标签页(可不做)
//获取DOM对像
var curTb = document.getElementByIdx_x(DivID);
//获取当前活动的工作薄(即第一个)
myWorksheet = myWorkbook.ActiveSheet;
//设置工作薄名称
myWorksheet.name="NP统计";
//获取BODY文本范围
var sel = document.body.createTextRange();
//将文本范围移动至DIV处
sel.moveToElementText(curTb);
//选中Range
sel.select();
//清空剪贴板
window.clipboardData.setData('text','');
//将文本范围的内容拷贝至剪贴板
sel.execCommand("Copy");
//将内容粘贴至工作簿
myWorksheet.Paste();
//打开工作簿
jXls.Visible = true;
//清空剪贴板
window.clipboardData.setData('text','');
jXls = null;//释放对像
myWorkbook = null;//释放对像
myWorksheet = null;//释放对像
}</script>
<input type="button" onClick="exportExcel('tabEnterNpDiv')" value="导出表格">
fgsghsh
<table width="200" border="1">
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
<div></div>
<div id="tabEnterNpDiv">
<table border="1" style="display:block">
<tr bgcolor="tomato">
<td align="middle">省份</td>
<td id = "province" colspan="2" align="middle">天津</td>
<td colspan="4" align="middle">携入</td>
</tr>
<tr bgcolor="turquoise">
<td rowspan="2" align="middle">时间</td>
<td align="middle">开始时间</td>
<td align="middle">结束时间</td>
<td align="middle">电信</td>
<td align="middle">移动</td>
<td align="middle">联通</td>
<td align="middle">携出合计</td>
</tr>
<tr bgcolor="mistyrose">
<td id = "sDate" align="middle">2010-10-17</td>
<td id = "eDate" align="middle">2010-11-17</td>
<td align="middle">成功量</td>
<td align="middle">成功量</td>
<td align="middle">成功量</td>
<td align="middle">成功量</td>
</tr>
<tr bgcolor="loralwhite">
<td rowspan="4" align="middle">携出</td>
<td colspan="2" align="middle">电信</td>
<td align="middle">--</td>
<td id = "s001002" align="middle">500</td>
<td id = "s001003" align="middle">700</td>
<td id = "out001" align="middle">1200</td>
</tr>
<tr bgcolor="indigo">
<td colspan="2" align="middle">移动</td>
<td id = "s002001" align="middle">3000</td>
<td align="middle">--</td>
<td id = "s002003" align="middle">2500</td>
<td id = "out002" align="middle">5500</td>
</tr>
<tr bgcolor="Gray">
<td colspan="2" align="middle">联通</td>
<td id = "s003001" align="middle">3000</td>
<td id = "s003002" align="middle">500</td>
<td align="middle">--</td>
<td id = "out003" align="middle">3500</td>
</tr>
<tr bgcolor="tan">
<td colspan="2" align="middle">携入合计</td>
<td id = "in001" align="middle">6000</td>
<td id = "in002" align="middle">1000</td>
<td id = "in003" align="middle">3200</td>
<td id = "inout" align="middle">10200</td>
</tr>
</table>
</div>
<div></div><table width="200" border="1">
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table></body>
</html> -
winform 导出 Excel
2019-03-01 14:51:16本篇博客将介绍「winform 导出 Excel」或「~~VS2017 导出 Excel~~ 」又或「C# 导出 Excel」又或「.Net 导出 Excel」的常用的两种方式以及简单分享其他方式(能力原因,已经尽力,用词还是可能不当)。 -
【SpringBoot】三十七、SpringBoot整合EasyPoi自定义字典导出Excel
2020-11-06 20:37:57前面我们介绍了 SpringBoot 中使用 JeecgBoot 的 Autopoi 导出 Excel,其实 Autopoi 的底层也是 EasyPoi,对于 Excel 的导入/导出也是非常方便的。那 EasyPoi 也是基于 POI 的,如果对这方面想要深究的,可以先看看... -
java poi导出Excel表格超大数据量解决方案
2016-07-02 10:59:43Java实现导出excel表格功能,大部分都会使用apache poi, apache poi API 地址 -
Easypoi模版导出excel
2017-10-20 09:54:07若您正在使用easypoi进行excel导出的话,希望这篇文章能帮到您。 该文章是使用easypoi得模版方式实现excel导出(目前是单sheet的导出), 若需要使用非模版形式导出多sheet得话,可以...模版形式导出Excel(多Shee... -
easyExcel导出excel
2019-06-03 17:27:54/** * 导出EXCEL * * @throws FileNotFoundException */ @RequestMapping("/excel") public void excel(HttpServletRequest request, HttpServletResponse response) throws Exception { ... -
SpringBoot使用Easypoi导出excel示例
2018-12-05 20:08:47前面博主介绍了如何通过JXLS模板导出excel,如何通过POI直接导出excel;这里再介绍一种导出excel的方式:使用JueYue封装的工具类---Easypoi导出excel。 软硬件环境:Windows10、IntelliJ IDEA、SpringBoot 2.1.1.... -
freemarker导出excel
2018-09-02 12:50:44导出excel有多种方式,我用的是freemarker和jxl导出excel,各有各的优缺点。 本篇讲的是用freemarker导出excel 众所周知freemarker是采用模板导出的方法,通用性比较高,但是由于它是用xml模板生成的,打开时会... -
easyPoi导出excel导出错误
2019-11-22 14:46:33easyPoi导出excel导出错误解决方案 最近项目中忽然出现excel不能导出的错误,以前测试是好用的,跟代码发现是在默认样式时报控制针问题,此问题为poi依赖缺少或者easypoi版本太低导致,项目中使用的为3.0.1版本,又... -
JavaEE_POI导出Excel, 设置导出Excel 单元格样式
2016-03-18 16:20:06代码:(设置Excel 导出Excel 样式的颜色 ) 提示:像 cellStyle, font 等对象只要创建一次就可以了,并不需要每个单元格去创建一个对象,否则话会样式太多,Excel 会报错。 因此我想到了用 HashMap 保存... -
java 根据excel模板导出excel
2019-09-12 16:43:20java 根据excel模板导出excel 由于项目需求,最近做了一个需要根据查询接口导出excel表格数据的需求 pom依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</... -
【SpringBoot】廿八、SpringBoot中使用JeecgBoot的Autopoi导出Excel
2020-08-05 20:51:39说到导出 Excel,我们首先会想到 poi、jsxl 等,使用这些工具会显得笨重,学习难度大。今天学习使用 JeecgBoot 中的 Autopoi 导出 Excel,底层基于 easypoi,使用简单,还支持数据字典方式 一、开发前戏 1、引入 ... -
Easypoi模版形式导出excel导出图片
2019-02-26 16:19:43若您正在使用easypoi进行excel导出的话,希望这篇文章能帮...非模版形式导出Excel(多Sheet)。 模版形式的多sheet导出可参考:EasyPOI->模版形式导出Excel(多Sheet) 模版导出可参考我的文章Easypoi导出e... -
js导出excel插件
2013-07-26 08:58:32js导出excel插件,需要配置为网站 -
Java 导出Excel利用模版导出
2018-07-31 15:09:08Java导出Excel和word的方式大体相同 1、Excel模版导出到页面下载 首先,导入依赖在pom.xml中我选择的事1.03的版本 第二、在项目或是自己需要的地方建立个文件夹放导出文件的模版,并且配好模版 第三... -
js导出excel文件
2019-06-26 16:48:26js导出excel文件 这里介绍一种前端导出excel表格的方法,感觉非常简单实用,直接贴代码。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>导出excel实例&... -
使用PhpSpreadsheet导入&导出Excel(适用各种Excel操作场景)
2018-11-14 18:44:30使用PhpSpreadsheet导入&amp;导出Excel,通用方法。适用各种Excel操作场景! -
Java中使用poi导入、导出Excel
2017-10-08 15:52:13一、介绍 当前B/S模式已成为应用开发的主流,而在...这样在我们实际的开发中,很多时候需要实现导入、导出Excel的应用。 目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和JavaExcel ... -
jeecg导出excel设置样式
2019-06-19 11:39:27jeecg导出excel设置样式jeecg导出excel设置样式 jeecg导出excel设置样式 今天工作中遇到个问题,在使用jeecg框架的时候使用自动生成代码导出excel文档,需要给添加序号和边框。 首先来看一下自动生成的导出代码 /** ... -
jQuery table2excel 导出Excel
2017-07-03 11:10:23导出Excel的功能非常常见,除了可以在后端导出外(代价大),也可以在浏览器前端导出(多表头、单元格合并都支持)。只需要引入jQuery的table2excel.js ,即可非常方便的导出excel。 下载地址:jQuery Plugin to ... -
nodejs导出Excel文档
2018-09-29 17:42:18node中导出Excel文档。 安装excel-export node中导出excel的模板有很多,这里我使用的是excel-export来进行的导出功能的实现。 新建一个node项目之后,在目录中找到package.json文件件,在dependencies:{}中添加 ... -
angularjs导出Excel
2018-03-15 13:41:23angularjs 1.x导出Excel方法,常用的有2种1. 直接导出table为xlsservice中加入homeServiceMoudule.factory('Excel',['$window', '$sce','ConfigService', '$localStorage',function($window, $sce, ConfigService,$... -
使用excelutils导出excel
2017-11-21 19:16:20使用excelutils导出excel非常简单,这里不做很多的介绍,直接贴出代码: 所需要的包有commons-beanutils-1.8.0.jar,commons-digester-1.8.jar,commons-logging-1.1.1.jar,excelutils.jar,poi-3.8-20120326.jar,... -
EasyPOI->模版形式导出Excel(多Sheet)
2019-02-27 14:03:18在使用EasyPOI进行模版导出时,通常导出得都是单Sheet得Excel,代码可参考我的文章Easypoi导出excel 非模版形式导出excel可参考我的文章:EasyPOI->非模版形式导出Excel(多Sheet) 如需要导出图片到excel可... -
miniUI实现导出Excel
2019-10-21 16:50:50miniUI实现导出Excel 前端页面 <td><a id="exportBtn" class="mini-button org">已缴费导出</a></td> <!--导出Excel相关HTML--> <form id="excelForm" action="/archives/... -
postman测试导出Excel接口
2019-12-11 10:15:56最近有导出Excel的接口要测试,而且项目加了权限不方便在浏览器直接测试后端接口,于是在postman上测试导出Excel方法,直接点击Send按钮会生成一堆乱码: 后来折腾了一会,发现Send按钮还有一个下拉选项Send ...
-
C8051F9xx_中文版.rar
-
test.uvprojx
-
炉排:Go本机表格数据提取程序包。 当前支持.xls,.xlsx,.csv,.tsv格式-源码
-
由三个大气Kong组成的包层微结构光纤中四波混频的研究
-
Cookie/Session
-
vue2.x+Element 实现大文件切片上传
-
阿里首席官珍藏:SpringCloud精通日记,工作经验全在这了
-
待办事项-源码
-
语义分割—1 Mask RCNN
-
MySQL 数据类型和运算符
-
Liffget:测试-源码
-
大财优配市场分析中芯国际产业链
-
转行做IT-第15章 Collection、泛型、Iterator
-
UniversalAdbDriverSetup.7z
-
最小代价最大节点度数的稀疏光疏导方法
-
使用vue搭建微信H5公众号项目
-
数据交换整体场景架构.vsdx
-
3D实时角色制作流程,零基础如何学习3d游戏建模
-
基于matlab的机器人最优路径规划仿真
-
2021年茶艺师(中级)考试平台及茶艺师(中级)