Java使用Spire.xls将Excel转为PDF文档 |
您所在的位置:网站首页 › xlsx转成pdf之前怎么调整文件 › Java使用Spire.xls将Excel转为PDF文档 |
#前言 需求是将一个excel表格数据源转为其他样式的文档,我是直接sprie.xls将其转为pdf进行展示 首先,我在创建的springboot项目中的pom文件中导入相关依赖 e-iceblue spire.xls.free 5.1.0再application.properties配置文件中引入数据源的路径 excel_path =C:/Users/xxx.xlsx pdf_path =C:/Users/xxx.pdf后端代码: public class SpireXLSController { //从properties中获取路径值 @Value("${excel_path}") private String excelPath;//读取excel,excel路径 @Value("${pdf_path}") private String pdfPath;//写入pdf路径 @RequestMapping("/text") public String Test01(){ //加载excel表格 Workbook workbook = new Workbook(); workbook.loadFromFile(excelPath); //获取第一个工作表 Worksheet worksheet = workbook.getWorksheets().get(0); //删除多余字段 worksheet.deleteColumn(1,2); worksheet.deleteColumn(5,2); //将含有Y放到上方 workbook.getDataSorter().getSortColumns().add(1, SortComparsionType.Values, OrderBy.Top); workbook.getDataSorter().getSortColumns().add(2, SortComparsionType.Values, OrderBy.Ascending); //指定需要排序的列索引以及排序的方式(基于单元格的值) //获取有数据的区域 CellRange dataRange =worksheet.getAllocatedRange(); //使用条件格式将数据为Y的背景色设为绿色 ConditionalFormatWrapper format1 = dataRange.getConditionalFormats().addCondition(); format1.setFormatType(ConditionalFormatType.Formula); format1.setFirstFormula("=IF($B1=\"Y\",true,false)"); format1.setBackColor(Color.green); //使用条件格式将数据为N有编号的背景色设为黄色 ConditionalFormatWrapper format2 = dataRange.getConditionalFormats().addCondition(); format2.setFormatType(ConditionalFormatType.Formula); format2.setFirstFormula("=AND(IF($A1=\"\",false,true),IF($B1=\"N\",true,false))"); format2.setBackColor(Color.yellow); //使用条件格式将数据为N无编号的背景色设为红色 ConditionalFormatWrapper format3 = dataRange.getConditionalFormats().addCondition(); format3.setFormatType(ConditionalFormatType.Formula); format3.setFirstFormula("=AND(IF($A1=\"\",true,false),IF($B1=\"N\",true,false))"); format3.setBackColor(Color.pink); //排序是否包含标题(默认第一个数据为标题,不会对它进行排序) workbook.getDataSorter().isIncludeTitle(true); //指定要排序的单元格范围并进行排序 workbook.getDataSorter().sort(worksheet.getRange()); //设置转换后的PDGF页面高宽适应工作表的内容大小 workbook.getConverterSetting().setSheetFitToPage(true); //设置转换后PDF的页面宽度适应工作表的内容宽度 workbook.getConverterSetting().setSheetFitToWidth(true); //复制workbook //遍历所有行 int count = 0; int lastRow = worksheet.getLastRow(); for (int i =1;i count++; CellRange cellRange = worksheet.getCellRange(i, 1, i, worksheet.getLastColumn()); CellRange range = worksheet.getCellRange(worksheet.getLastRow() + 1, 1, worksheet.getLastRow() + 1, worksheet.getLastColumn()); worksheet.copy(cellRange,range,true); } } for (int i = worksheet.getLastRow()-count; i > 0; i--) { if(worksheet.getCellRange(i,1).isBlank()){ //删除指定行 worksheet.deleteRow(i); } } //将生成的文档保存到指定路径 workbook.saveToFile(pdfPath, FileFormat.PDF); return "index.html"; } }总结 1:以上就是全部代码了,代码逻辑的话就比较繁琐,spire.xls直接从excel读取到背景颜色时可以按照背景颜色排序,但如果自己设置完format.setBackColor不可以直接调用方法排序,所以我先按某个条件字段进行排序固定位置,然后再设置背景色(先设背景颜色后就无法移动,所以只能先排序,再设置) 2:按照某个字段值设置颜色(如果是数字类型的话可以直接比较,如果是字符串,而且这涉及到两个字段才能决定所以用的公式)最终效果是上面绿色,下面是红色和黄色夹杂到一起,难以分离,最初想通过两个excel或者两个sheet删除异步分数据copy在一块,但因为限制实现不了,最终按照正序进行分别按条件隔条复制删除(@1先赋值变量,再删除后将变量值copy到最后是获取不到数据的所以只能先copy再delete指定行,@2正序删除,逆序会导致原有顺序杂乱) |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |