Java操作excel的综合应用(jxl)

精通Java JXL操作Excel库 本文还有配套的精品资源,点击获取 简介:Java JXL是一个开源库,专门用于在Java程序中读取、写入和操作Excel文件。它提供了一套方便的API,支持多种Excel操作,比如读写单元格内容、格式化工作表、插入公式和图像等。本教程详细介绍了如何使用JXL库实现基本与高级Excel操作,包括安装导入、单元格和工作表管理、样式格式化、以及性能最佳实践。 1. JX... 阅读详情
根据excel模板生成excel报表文件--用于报表打印 

jxl修改excel模板文件,实现动态数据分页打印 

1.支持公式运算 
2.支持对合并的单元格复制 

Java代码  收藏代码
  1. package mcfeng.util.excel;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import jxl.CellType;  
  7. import jxl.Workbook;  
  8. import jxl.format.CellFormat;  
  9. import jxl.read.biff.BiffException;  
  10. import jxl.write.Label;  
  11. import jxl.write.WritableCell;  
  12. import jxl.write.WritableSheet;  
  13. import jxl.write.WritableWorkbook;  
  14. import jxl.write.WriteException;  
  15. import jxl.write.biff.RowsExceededException;  
  16. import mcfeng.util.ExcelDataSource;  
  17. import mcfeng.util.MoneyUtil;  
  18. import mcfeng.util.StringUtil;  
  19.   
  20. public class ExcelEditByModel {  
  21.   
  22.     //list中取数据  
  23.     private final static String LIST_FLAG = "##";  
  24.       
  25.     //map中取数据  
  26.     private final static String MAP_FLAG = "#&";  
  27.       
  28.     //数字类型处理,支持公式  
  29.     private final static String NUM_FLAG = "#_&";  
  30.       
  31.     //大写金额处理  
  32.     private final static String DX_FLAG = "##D&";  
  33.   
  34.     public static void editExcel(int totalPage,String sourcefile, String targetfile) {  
  35.         File file1 = new File(sourcefile);  
  36.         File file2 = new File(targetfile);  
  37.         editExcel(totalPage,file1, file2);  
  38.     }  
  39.   
  40.     public static void editExcel(int totalPage,File sourcefile, File targetfile) {  
  41.         String mycellValue = null;  
  42.         Workbook wb = null;  
  43.         try {  
  44.             // 构造Workbook(工作薄)对象  
  45.             wb = Workbook.getWorkbook(sourcefile);  
  46.         } catch (BiffException e) {  
  47.             e.printStackTrace();  
  48.         } catch (IOException e) {  
  49.             e.printStackTrace();  
  50.         }  
  51.   
  52.         WritableWorkbook wwb = null;  
  53.         try {  
  54.             // 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象  
  55.             wwb = Workbook.createWorkbook(targetfile, wb);  
  56.         } catch (IOException e) {  
  57.             e.printStackTrace();  
  58.         }  
  59.   
  60.         if (wwb != null) {  
  61.             // 读取第一张工作表  
  62.             // Workbook的getSheet方法的参数,表示工作表在工作薄中的位置  
  63.   
  64.             WritableSheet ws = wwb.getSheet(0);  
  65.   
  66.             int scale = ws.getSettings().getScaleFactor();// 获取页面缩放比例  
  67.               
  68.             int rowNum = ws.getRows();  
  69.             int colNum = ws.getColumns();  
  70.               
  71.             //计算出每页行数  
  72.             int pageNum = rowNum/totalPage;  
  73.   
  74.             for (int j = 0; j < rowNum; j++) {  
  75.                 // 得到当前行的所有单元格  
  76.   
  77.                 //计算出取数据的位置  
  78.                 int dataNum = j/pageNum;  
  79.                   
  80.                 for (int k = 0; k < colNum; k++) {  
  81.                     // 对每个单元格进行循环  
  82.   
  83.                     WritableCell mywc = ws.getWritableCell(k, j);  
  84.   
  85.                     System.out.println("mywc.getType(): " + mywc.getType());  
  86.                     if (mywc.getType() == CellType.LABEL) {  
  87.   
  88.                         Label l = (Label) mywc;  
  89.   
  90.                         String cellValue = l.getContents();  
  91.                         //处理后的值  
  92.                         String opValue = null;  
  93.                           
  94.                         System.out.println("cellValue: " + cellValue);  
  95.   
  96.                         // 处理excel单元格中#开头的字符串  
  97.                         if (cellValue != null && cellValue.startsWith("#")) {  
  98.   
  99.                             if (cellValue.startsWith(LIST_FLAG)) {  
  100.                                   
  101.                                 if(cellValue.startsWith(DX_FLAG))  
  102.                                 {  
  103.                                     opValue = cellValue.replaceAll(DX_FLAG, "");  
  104.                                 }  
  105.                                 else  
  106.                                 {  
  107.                                     opValue = cellValue.replaceAll(LIST_FLAG, "");  
  108.                                 }  
  109.                                   
  110.                                   
  111.                                 if (StringUtil.isNumeric(opValue)) {  
  112.                                     mycellValue = ExcelDataSource.getData(opValue,dataNum);  
  113.                                     if(cellValue.startsWith(DX_FLAG))  
  114.                                     {  
  115.                                         mycellValue = MoneyUtil.amountToChinese(mycellValue);  
  116.                                     }  
  117.                                       
  118.                                 }  
  119.   
  120.                             } else if (cellValue.startsWith(MAP_FLAG)) {  
  121.                                 opValue = cellValue.replaceAll(MAP_FLAG, "");  
  122.   
  123.                                 mycellValue = ExcelDataSource.getData(opValue,dataNum);  
  124.                             }  
  125.                             else if (cellValue.startsWith(NUM_FLAG)) {  
  126.                                 //支持公式运算  
  127.                                 opValue = cellValue.replaceAll(NUM_FLAG, "");  
  128.   
  129.                                 mycellValue = ExcelDataSource.getData(opValue,dataNum);  
  130.                                 System.out.println("mycellValue: " + mycellValue);  
  131.                                   
  132.                                 //获取字体,重新设置  
  133.                                 CellFormat wcff = mywc.getCellFormat();  
  134.                                   
  135.                                 jxl.write.Number num = new jxl.write.Number(k,j,Double.valueOf(mycellValue),wcff);  
  136.                                   
  137.                                   
  138.                                 try {  
  139.                                     ws.addCell(num);  
  140.                                 } catch (RowsExceededException e) {  
  141.                                       
  142.                                     e.printStackTrace();  
  143.                                 } catch (WriteException e) {  
  144.                                       
  145.                                     e.printStackTrace();  
  146.                                 }  
  147.                                 continue;  
  148.                             }  
  149.                             l.setString(mycellValue);  
  150.                         }  
  151.                     }  
  152.                 }  
  153.             }  
  154.               
  155.             //设置页面缩放比例  
  156.             ws.getSettings().setScaleFactor(scale);  
  157.   
  158.             try {  
  159.                 // 写入 Excel 对象  
  160.                 wwb.write();  
  161.                 // 关闭可写入的 Excel 对象  
  162.                 wwb.close();  
  163.                 // 关闭只读的 Excel 对象  
  164.                 wb.close();  
  165.             } catch (IOException e) {  
  166.                 e.printStackTrace();  
  167.             } catch (WriteException e) {  
  168.                 e.printStackTrace();  
  169.             }  
  170.   
  171.         }  
  172.     }  
  173.   
  174. }  


生成分页模板 
Java代码  收藏代码
  1. package mcfeng.util.excel;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import jxl.Range;  
  7. import jxl.Workbook;  
  8. import jxl.read.biff.BiffException;  
  9. import jxl.write.WritableCell;  
  10. import jxl.write.WritableSheet;  
  11. import jxl.write.WritableWorkbook;  
  12. import jxl.write.WriteException;  
  13. import jxl.write.biff.RowsExceededException;  
  14.   
  15. public class ExcelEditByModelPage {  
  16.   
  17.     public static void editExceltoModel(int totalPage,String sourcefile, String targetfile) {  
  18.         File file1 = new File(sourcefile);  
  19.         File file2 = new File(targetfile);  
  20.         editExceltoModel(totalPage, file1,file2);  
  21.     }  
  22.       
  23.     public static void editExcelbyModelPage(int totalPage,String sourcefile,String tempfile, String targetfile) {  
  24.         File file1 = new File(sourcefile);  
  25.         File file2 = new File(tempfile);  
  26.         File file3 = new File(targetfile);  
  27.         editExcelbyModelPage(totalPage, file1,file2,file3);  
  28.     }  
  29.   
  30.     public static void editExcelbyModelPage(int totalPage, File sourcefile,File tempfile,  
  31.             File targetfile)  
  32.     {  
  33.         if(totalPage == 1)  
  34.         {  
  35.             ExcelEditByModel.editExcel(totalPage, sourcefile, targetfile);  
  36.             return;  
  37.         }  
  38.         //需要分页时,生成中间模板文件  
  39.         ExcelEditByModel.editExcel(totalPage,editExceltoModel(totalPage,sourcefile,tempfile), targetfile);  
  40.     }  
  41.       
  42.     // 生成分页模板  
  43.     public static File editExceltoModel(int totalPage, File sourcefile,File targetfile) {  
  44.           
  45.         Workbook wb = null;  
  46.         try {  
  47.             // 构造Workbook(工作薄)对象  
  48.             wb = Workbook.getWorkbook(sourcefile);  
  49.         } catch (BiffException e) {  
  50.             e.printStackTrace();  
  51.         } catch (IOException e) {  
  52.             e.printStackTrace();  
  53.         }  
  54.   
  55.         WritableWorkbook wwb = null;  
  56.         try {  
  57.             // 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象  
  58.             wwb = Workbook.createWorkbook(targetfile, wb);  
  59.         } catch (IOException e) {  
  60.             e.printStackTrace();  
  61.         }  
  62.   
  63.         if (wwb != null) {  
  64.             // 读取第一张工作表  
  65.             // Workbook的getSheet方法的参数,表示工作表在工作薄中的位置  
  66.   
  67.             WritableSheet ws = wwb.getSheet(0);  
  68.   
  69.             int scale = ws.getSettings().getScaleFactor();// 获取页面缩放比例  
  70.   
  71.             int rowNum = ws.getRows();  
  72.             int colNum = ws.getColumns();  
  73.   
  74.             System.out.println("rowNum: " + rowNum);  
  75.             System.out.println("colNum: " + colNum);  
  76.               
  77.             //找出合并的单元格  
  78.             Range[] ranges = ws.getMergedCells();  
  79.             for(int rnum = 0;rnum < ranges.length;rnum++)  
  80.             {  
  81.                 System.out.println("左上行数" + ranges[rnum].getTopLeft().getRow());  
  82.                 System.out.println("左上列数" + ranges[rnum].getTopLeft().getColumn());  
  83.                 System.out.println("右下行数" + ranges[rnum].getBottomRight().getRow());  
  84.                 System.out.println("右下列数" + ranges[rnum].getBottomRight().getColumn());  
  85.             }  
  86.   
  87.             int i = 1;  
  88.             while (i < totalPage) {  
  89.   
  90.                 for (int row = 0; row < rowNum; row++) {  
  91.                     // 得到当前行的所有单元格  
  92.   
  93.                     for (int col = 0; col < colNum; col++) {  
  94.                         // 对每个单元格进行循环  
  95.                         // 复制单元格  
  96.                         WritableCell cell = ws.getWritableCell(col, row)  
  97.                                 .copyTo(col, row + (rowNum*i));  
  98.   
  99.                         try {  
  100.                             ws.addCell(cell);  
  101.                         } catch (RowsExceededException e) {  
  102.                             e.printStackTrace();  
  103.                         } catch (WriteException e) {  
  104.                             e.printStackTrace();  
  105.                         }  
  106.                     }  
  107.                 }  
  108.                   
  109.                 //按照模板合并单元格  
  110.                 for(int rnum = 0;rnum < ranges.length;rnum++)  
  111.                 {  
  112.                     int lcol = ranges[rnum].getTopLeft().getColumn();  
  113.                     int lrow = ranges[rnum].getTopLeft().getRow() + (rowNum*i);  
  114.                     int rcol = ranges[rnum].getBottomRight().getColumn();  
  115.                     int rrow = ranges[rnum].getBottomRight().getRow() + (rowNum*i);  
  116.                       
  117.                     try {  
  118.                         ws.mergeCells(lcol, lrow, rcol, rrow);  
  119.                     } catch (RowsExceededException e) {  
  120.                           
  121.                         e.printStackTrace();  
  122.                     } catch (WriteException e) {  
  123.                           
  124.                         e.printStackTrace();  
  125.                     }  
  126.                       
  127.                 }  
  128.                 i++;  
  129.             }  
  130.   
  131.             //设置页面缩放比例  
  132.             ws.getSettings().setScaleFactor(scale);  
  133.         }  
  134.   
  135.         try {  
  136.             // 写入 Excel 对象  
  137.             wwb.write();  
  138.             // 关闭可写入的 Excel 对象  
  139.             wwb.close();  
  140.             // 关闭只读的 Excel 对象  
  141.             wb.close();  
  142.         } catch (IOException e) {  
  143.             e.printStackTrace();  
  144.         } catch (WriteException e) {  
  145.             e.printStackTrace();  
  146.         }  
  147.           
  148.         return targetfile;  
  149.     }  
  150. }  
Java中使用JXL库生成和处理Excel报表 本文还有配套的精品资源,点击获取 简介:在Java中处理Excel报表是一项常见任务,尤其是在数据导出和分析应用中。JXL库是一个流行的Java库,它允许开发者用Java语言轻松读写Microsoft Excel文件。本文将深入探讨如何使用JXL库在Java中创建Excel报表,并从数据库读取和排列数据。我们将通过构建复杂的报表、格式化单元格、合并单元格和排列数据来展示这些... 阅读详情

相关推荐

Java使用JXL库操作Excel表格的全面指南

在第一章中,我们将揭开JXL库的神秘面纱,理解它的核心价值以及它在Java编程世界中的定位。JXL库,即Java Excel API,是一个开源的Java库,它允许开发者在Java应用程序中轻松地读取和写入Microsoft Excel格式的文件,即.xls和.xlsx。通过使用JXL,开发者能够有效地处理电子表格数据,实现数据导入导出等功能,这对于需要与Excel文件交互的IT从业者来说是一大福音。

weixin_28888459的博客 851

(转)jxl使用指南

1 从Excel文件读取数据表   Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术 语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java) import java.io.*; import jxl...

Done 471

Java操作Excel实战:基于JXL的简洁读写实现

JXL(Java Excel API)是一个轻量级的Java库,专为读写Excel 97-2003格式(.xls)文件而设计。它以简单易用、资源消耗低的特点在早期Java开发中广受欢迎,尤其适用于数据导入导出、报表生成等业务场景。其核心功能包括:读取Excel中的单元格数据、支持多种数据类型解析(如字符串、数字、日期)、创建和写入新的Excel文件,并支持基本的样式设置。对于小型项目或对性能要求不苛刻的场景,JXL是一个快速上手的解决方案。要在Java项目中使用JXL,需下载其JAR包(如。

weixin_42611177的博客 1206

在java中使用jxl操作excel

jxl是一个韩国人写的Java操作excel的工具, 在java的开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI(即jxl)。jxl功能相对POI比较弱一点。 但jExcelAPI对中文支持非常好,API是纯Java的, 不依赖Windows系统,即使运行在Linux下,也同样能够正确的处理Excel文件。 需要补充说明的是,jxl对图形和图表的支持

cx136295988的博客 5818

Java与Excel的交互:使用jxl库解析和操作Excel文件

本文还有配套的精品资源,点击获取 简介:在Java中处理Excel文件对于数据处理场景至关重要。本文将介绍如何使用jxl库来读取、写入和操作Excel文件。通过示例代码和详细步骤,包括添加jxl依赖、读取Excel内容、写入数据到Excel以及运用jxl库提供的其他功能,如样式设置和单元格合并等。jxl库提供了对多种Excel格式的支持,并通过API文档可以帮助进一步深入使...

weixin_35734408的博客 2353

深入探索Java中使用JXL库操作Excel文件

处理财务数据时,对小数点的精确控制是必不可少的。JXL库提供了对小数点格式预定义和自定义的能力,允许开发者按照业务需求来格式化数据。JXL库预定义了多种小数点格式,可以直接应用。例如,我们可以使用类来定义小数点后保留两位数的格式:以上代码创建了一个新的单元格格式,小数点后将保留两位数。如果预定义的格式无法满足需求,我们可以自定义格式。比如,在处理货币时,可能需要添加货币符号并设置特定的小数位数:然后,可以将这个自定义格式应用到对象中。

weixin_30820933的博客 1108

java操作导出Excel(jxl导出WritableWorkbook)jxl合并单元格,单元格的设置,单元格居中、字体、大小、换行、合并行,列宽、自动换行撑起高度、指定特定字符串样式等

java操作导出Excel(jxl导出WritableWorkbook)jxl合并单元格,单元格的设置,单元格居中、字体、大小、换行、合并行,列宽、指定特定字符串样式等

xiansibao的博客 3684

JXL库操作Excel教程与实践

JXL(Java Excel API)是一个开源库,它允许Java程序以编程方式读取和写入Microsoft Excel文件格式(.xls)。JXL库提供了简单的API来处理Excel文件中的数据、公式、样式和格式化,使其成为需要处理Excel数据但不希望依赖微软Office COM组件的Java开发者的重要工具。

weixin_35748962的博客 869

JXL生成EXCEL时单元格设置为数值却展示货币或自定义的问题处理

JXL生成EXCEL、单元格格式、数值、货币、自定义

SomeIDEA 1843

JXL操作EXCEL(详)

JXL操作EXCEL公式,颜色,表格,百分比,小数点等等等等

wintab开发例程

 タブレットとスタイラスペンを使うと、パソコンに手書きの線を入力できます。筆圧を入力することができるので毛筆のような表現も可能です。ペンの傾きを入力できる機種もあり、アイデア次第で面白いことに使えそうです。  私は昔(94年頃)、WACOMのタブレットを用いたプログラム開発をしたことがあります。当初A3版ほどの大きさのUDというタブレットを使っていて、その後 ArtPad という小さいサイズの

grass168的专栏 3240

Java操作Excel之JXL

http://it.chinawin.net/softwaredev/article-13f87.html http://www.cnblogs.com/raymond19840709/archive/2008/06/26/1230289.html http://www.iteye.com/blogs/tag/Jxl Java操作Excel之理解 JXL--读取Exc

沉底的石头 1968

systrace分析 之 问题初步定位

如下surfaceflinger空缺点,上面对应的bufferTX 中有buffer,但VSYNC-SF 过来后,SurfaceFlinger却没有去取,检查测试app “android.settings”, 也没有GPU completion 时间长的问题,所以该部分可以请SurfaceFlinger的owner 进一步确认为何不取buffer。. GPU拿的是acquireFence HWC拿的是releaseFence, GPU是绘图,HWC是合成显示,这两个是互相等待的关系,

yangzex的专栏 3194

java JXL操作Excel文件

-------------jxl和POI的区别(来自网络,感谢)----- jxl优点: ①Jxl对中文支持非常好,操作简单,方法看名知意。 ②Jxl是纯javaAPI,在跨平台上表现的非常完美 ③生成Excel 2000标准格式 ④支持字体、数字、日期操作 ⑤能够修饰单元格属性 ④支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 缺点:效率低,图片支持不完善,对格

学习笔记 2373

C# WPS操作PPT,全屏,缩率图,备注,跳转播放

本文介绍了一个使用C#开发的PPT操作工具,主要功能包括检测当前打开的PPT文件、获取选中PPT路径、指定播放PPT、获取PPT页面序号和缩略图、提取备注内容等。文章展示了操作界面效果图,并重点解决了用户手动退出PPT后重新获取路径时报错的问题。核心代码实现了通过WPS API进行PPT文件的打开、全屏播放、页面跳转、获取当前页位置等功能,同时支持生成PPT缩略图预览和备注信息提取。当用户未通过工具按钮打开PPT时,程序会自动初始化PPT信息确保功能正常使用。

遇见--专栏 310

京东前端200道面试题及参考答案(中)

前端优化是“提升用户体验、降低资源消耗”的核心手段,需围绕“用户感知的性能指标”(如页面加载速度、交互流畅度)展开,覆盖加载优化、渲染优化、代码优化、网络优化、缓存优化、性能监控六大维度,每个维度下有具体可落地的措施,同时需结合项目实际场景(如单页应用、电商首页)选择优化方案。分页组件需通过props接收“数据总量、当前页、每页条数”等基础信息,通过emit触发“页码切换、每页条数变化”的回调(供父组件请求对应页数据),同时定义默认值确保兼容性。核心Props与Emit设计<template>

大模型大数据攻城狮的专栏 590

Java操作Excel之JXL (填充EXCEL模板)

前阵子接到一个项目,其中有个功能就需要把数据填充到 绘制好的EXCEL表单里面,在网上搜集了一些东西之后就开始做了,呵呵。 *********************************************先看看转载的这部分************************************************************* Java操作Excel之理解JXL--读...

My Way 1220

【GRASS GIS零基础入门教程】2.1:初识GRASS GIS软件

GRASS GIS是一个强大的计算引擎,用于栅格、矢量和地理空间处理。它支持地形和生态系统建模、水文、数据管理和图像处理。通过内置的时态框架和Python API,它可以进行高级时间序列分析和快速地理空间编程,并针对各种硬件配置的大规模分析进行优化。

智慧空间实验室 847

jxl操作excel

jxl操作excel文件的方法 最后的“进阶操作”确实很有用处,笔者感觉文档写到这里以后把以前很多不明白的东西搞清楚了,豁然开朗啊。建议仔细看看“数据格式”、“方法字典”和“其他讲解”三章,含金量很高。 文中附带代码,可读性很高,具有代表性,可以直接拿来用,不过其中一些适配字段要自己填。 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵E

让我们的手指敲起锋利的代码勇敢前进! 2953

手把手教你学Simulink——基于Simulink的隔离型DC-DC全桥变换器移相控制建模示例

本文详细介绍了基于Simulink的全桥移相变换器(PSFB)建模与控制方法。首先分析了全桥移相拓扑在大功率应用中的优势,包括ZVS实现、高频化和小型化特点。随后给出了具体设计参数和移相控制策略,采用电压外环+移相角内环的双闭环控制架构。文章重点演示了Simulink建模步骤,包括主电路搭建、移相PWM生成和PI控制器设计,并通过满载稳态、负载阶跃和轻载测试三种场景验证了系统性能。最后总结了工程实践要点,提出自适应控制等扩展方向,强调移相控制通过精准时间管理实现高效能量转换的核心价值。

MHD0815的博客 261

轨迹优化 | 基于ESDF的共轭梯度优化算法(附ROS C++/Python仿真)

共轭梯度法的核心原理是求解优化问题的共轭向量组作为优化方向,由于优化方向间彼此正交,故每次迭代只需沿着一个方向寻优而互不影响。本文设计基于ESDF的障碍约束、曲率约束和平滑约束,基于ROS C++和Python提供了共轭梯度法的轨迹优化实践案例

FRIGIDWINTER的博客 1万+
上一篇: 遍历集合List
下一篇: phpMyAdmin 常见错误解决
OnePiece_Sky
博客等级 码龄15年 9粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值