一分钟带你快速把excel转pdf格式

合集下载

把ECEL表格用PDF打开怎么就变成PDF图标了

把ECEL表格用PDF打开怎么就变成PDF图标了

把ECEL表格用PDF打开怎么就变成PDF图标了篇一:excel怎么转换成pdf 有它就够了excel怎么转换成pdf 有它就够了PDF格式的文件可以帮助我们避免信息泄露,保证资料安全。

所以很多时候我们在文件传输之前会将文件转换成pdf的格式,文件转换不是那么简单,但是只要找对软件就不是什么大问题了。

使用迅捷PDF转换器只需三步就可以帮你轻松解决这些问题。

迅捷PDF转换器可以非常准确的全文件识别转化中文、英文、表格,并能够将图形转入到Excel文本中,此外,软件支持转换加密后的PDF文件(软件提供PDF解密功能),支持批量添加PDF文件(支持同步转换成为不同的文件格式(Word、TXT、JPG、Excel、PPT等等。

) 在操作上,也十分简单:1、打开软件后,在左侧选择“Excel转PDF”转换模式。

PDF 转换器软件目前支持Word、Excel、图片等转换成PDF格式,也可以将PDF转换成Word(doc、docm、docx),Excel(xls、xlsx、xlsm),PowerPoint(ppt、pptc、pptm),TXT,HTML,图像(JPG、BMP、GIF、IMG),点击图标勾选即可。

2、添加文件。

请点击软件上方的“添加文件”按钮,将Excel文件添加到程序界面,软件支持添加多个文件。

3、输出选项。

PDF转换器有灵活的输出路径,可以将转换出来的文件保存在原文件夹内,或者自定义文件夹存储路径,最后点击右下方“开始转换”即可顺利完成转换。

总得来看,它的亮点还是很多的。

一方面它支持多种格式的转换;另一方面它还提供了压缩、转换格式、分隔、合并、解密等功能,一站式解决PDF的各种问题。

工作中遇到任何格式转换问题,有它就够了!篇二:excel表格转换成PDF时变成空白页的解决方法excel表格转换成PDF时变成空白页的解决方法故障现象: excel表格转换成PDF,出现空白页尝试方法:1、怀疑PDF转换器有问题,卸载重装PDF及excel,问题依旧。

利用Excel进行数据表的数据表报表自动更新并导出为PDF并发送技巧

利用Excel进行数据表的数据表报表自动更新并导出为PDF并发送技巧

利用Excel进行数据表的数据表报表自动更新并导出为PDF并发送技巧利用Excel进行数据表的数据报表自动更新并导出为PDF并发送技巧在日常的工作中,我们通常需要制作数据表和数据报表,并且需要定期更新和导出为PDF文件,以便与他人分享或保存档案。

为了更加高效地完成这一任务,我们可以利用Excel的功能来自动更新数据表并将其导出为PDF,并通过电子邮件发送给相关人员。

下面将介绍一些技巧,帮助您实现这一目标。

1. 设定数据源首先,我们需要将数据源与数据表关联起来,以实现数据的自动更新。

在Excel中,我们可以使用数据透视表或连接外部数据源的方法。

选择适合您需求的方式,确保数据源与数据表之间的连接正确。

2. 自动更新数据表接下来,我们可以利用Excel的功能来自动更新数据表。

一种方法是使用Excel的刷新功能,当数据源发生更改时,数据表会自动刷新并更新。

另一种方法是使用VBA宏编程,通过编写代码实现自动刷新数据表的功能。

根据您的需求和熟练程度,选择适合您的方法。

3. 设计数据报表在Excel中,我们可以通过使用各种功能和工具来设计美观有效的数据报表。

例如,利用图表、数据透视表、条件格式等功能,使数据更加直观和易于理解。

同时,根据需要添加标题、图例、表格等元素,使数据报表更具可读性。

4. 导出为PDF文件完成数据表和数据报表的设计后,我们可以将其导出为PDF文件,以便与他人分享或储存。

在Excel中,选择“文件”菜单中的“导出”选项,然后选择“创建PDF/XPS文档”命令。

根据提示选择导出范围和文件位置,即可将数据报表导出为PDF文件。

5. 通过电子邮件发送最后,为了与相关人员分享数据报表,我们可以通过电子邮件发送PDF文件。

在Excel中,选择“文件”菜单中的“共享”选项,在弹出的窗口中选择“电子邮件附件”。

根据提示选择收件人、邮件主题和正文内容,然后附加上一步中导出的PDF文件,即可快速发送数据报表。

excel 2010中“另存为 Adobe PDF”选项快捷方式

excel 2010中“另存为 Adobe PDF”选项快捷方式

excel 2010中“另存为Adobe PDF”选项快捷方式
1.打开EXCEL,点击左上角的Office按钮,打开word选项,选中加载项。

2.向下拉动滚动条,你将会看到“禁用的应用程序”里。

二种情况:
第一种:如果没有关于Adobe被禁用的信息。

1.点击最下面的“管理选项--选择“COM加载相”--再点击旁边的按钮”转到...“。

2.你要将看到的”Acrobat PDFmaker office COM Addin“打上勾,然后确定。

3.通常情况上就能解决了。

第二种:如果有关于Adobe被禁用的信息。

1.点击最下面的“管理选项--选择“COM加载相”--再点击旁边的按钮”转到...“。

2.删除Acrobat PDFmaker office COM Addin 这一条。

3.关闭软件,并再次打开软件。

4.回到“管理选项--选择“COM加载相”--再点击旁边的按钮”转到...“
5. 点击”添加“按钮去重新添加”Acrobat PDFmaker office COM Addin“
6.这个文件在你PDF安装目录中”......\PDFMaker\Office\PDFMOfficeAddin.dll“。

7.添加后,将此新加项打勾,你就可以看到EXCEL工具栏会出现Adobe PDF按钮了。

8.重启软件后一般就会正常了。

Excel中的数据表报表自动更新并导出为PDF并发送邮件并保存至云端技巧

Excel中的数据表报表自动更新并导出为PDF并发送邮件并保存至云端技巧

Excel中的数据表报表自动更新并导出为PDF并发送邮件并保存至云端技巧技巧1:设置自动更新数据表Excel中的数据表报表可以通过设置自动更新功能,实现数据的自动更新和刷新。

这样可以确保报表始终呈现最新的数据。

具体步骤如下:1. 打开Excel,并选择需要自动更新的数据表报表。

2. 在“数据”选项卡中,点击“刷新所有”。

3. 在弹出的对话框中,选择“自动刷新”。

4. 设置刷新的时间间隔,可以选择每隔几分钟、每小时、每天或者其他时间段。

5. 点击“确定”,完成自动更新设置。

技巧2:导出报表为PDF格式Excel中的数据表报表可以方便地导出为PDF格式,以便与他人共享或者打印。

导出为PDF格式可以确保报表的格式不被篡改,同时可以方便阅读和分享。

下面是导出为PDF的步骤:1. 打开需要导出的数据表报表。

2. 在“文件”选项卡中,选择“另存为”。

3. 在另存为对话框中,选择保存位置和文件名,并在“保存类型”中选择“PDF”格式。

4. 点击“保存”,完成导出为PDF的操作。

技巧3:发送邮件附件除了导出为PDF格式,Excel中的数据表报表还可以通过发送邮件的方式分享给他人。

下面是通过发送邮件附件的步骤:1. 在导出为PDF格式后,打开邮箱客户端。

2. 创建新的邮件,并填写收件人、主题和正文等信息。

3. 点击邮件编辑器中的“附件”按钮。

4. 选择之前导出的PDF文件,并添加为附件。

5. 点击“发送”,完成发送邮件的操作。

技巧4:保存至云端为了数据的安全和便捷性,Excel中的数据表报表可以保存至云端存储服务,如OneDrive、Google云端硬盘等。

这样可以保证数据的备份和随时随地的访问。

下面是保存至云端的步骤:1. 在导出为PDF格式后,打开云端存储服务。

2. 创建一个新的文件夹,用于存放数据表报表。

3. 将之前导出的PDF文件拖拽或者上传至这个文件夹。

4. 完成保存至云端的操作。

通过以上四个技巧,你可以在Excel中实现数据表报表的自动更新、导出为PDF、发送邮件附件和保存至云端。

怎样利用手机将excel表格转换成PDF格式

怎样利用手机将excel表格转换成PDF格式

怎样利用手机将excel表格转换成PDF格式
怎样利用手机将excel表格转换成PDF格式在我们办公过程中,会经常遇见将excel表格转换成PDF格式的情况,通常是在电脑上,那么在手机上如何转换呢?跟小编一起看看如何操作吧!
操作环境:小米手机
操作工具:小米手机, PDF转换器,excel文件
1.因为在手机上进行文件格式转换,所以我们在手机应用商店中搜索PDF转换器进行安装使用.
2.选择功能区栏目。

打开之后在下面栏目中选择转为PDF,在功能区选择Excel转PDF。

3.添加文件。

点击Excel转PDF后添加文件,选择需要转换的文件。

点击确定转换。

4.文件上传与转换。

这里先将文件上传,然后上软件会对文件进行内容识别校验,上传成功之后会自动对文件进行转换。

5.文件转换完成。

文件转换完成之后会下载,可以查看文档,点击进去可以查看转换后的文件,另外在功能区书架也可以查看哦。

上面几步就是利用手机将Excel文件转换成PDF文件的操作方法,有需要的朋友可以参考上述步骤进行操作。

excel转化pdf注意事项

excel转化pdf注意事项

excel转化pdf注意事项
将Excel文件转换为PDF文件时,有一些注意事项需要考虑。

首先,确保你的Excel文件中的内容和格式已经按照你的要求进行
了设置和排列。

这包括正确的单元格合并、边距设置、页面布局等。

在转换为PDF之前,最好先进行一次最终的审查,确保所有内容都
是准确的,没有错别字或排版问题。

其次,选择合适的转换工具或软件是非常重要的。

有很多软件
和在线工具可以将Excel文件转换为PDF,但它们的功能和输出质
量可能会有所不同。

确保选择一个可靠的工具,可以保证转换后的PDF文件保持原有的格式和布局,同时输出的质量也要尽可能高。

另外,如果你的Excel文件中包含有机密或私人信息,确保在
转换为PDF之前进行适当的安全措施。

这可能包括对PDF文件进行
加密或者限制打印和复制内容的权限,以防止未经授权的访问和使用。

最后,转换为PDF后,最好再次打开文件进行检查,确保转换
后的PDF文件与原始Excel文件的内容和格式一致。

有时候转换过
程中可能会出现一些意外的错误,比如错位或者丢失部分内容,因
此进行最终的检查是非常必要的。

总的来说,将Excel文件转换为PDF需要注意文件内容和格式的准确性、选择合适的转换工具、保护文件的安全性以及进行最终的检查。

这样才能确保转换后的PDF文件能够满足你的需求并且达到预期的效果。

Excel中如何将选中的单元格区域保存为PDF文档

Excel中如何将选中的单元格区域保存为PDF文档

Excel中如何将选中的单元格区域保存为PDF文档
PDF文档因为格式不会改变,因此很适合保存下来发送给别人。

当需要将Excel保存为PDF的时候,在保存类型里面选择PDF文档,就可以将当前的工作表保存为一个新的PDF文档。

但是当需要将某一特定单元格区域保存为PDF时,就需要多一步的操作。

1.选中这部分区域。

2.点击“文件”。

3.点击“另存为”,选择需要保存的路径。

4.这时,在保存类型里面选择PDF。

上述步骤都和平时保存为PDF文档一致,在这里需要多一步操作。

5.点击“选项”,在“发布内容”里面选择“所选内容”。

然后点击“确定”。

6.最后点击“保存”。

这时选中的区域就会生成一个PDF文档了,里面的内容就是在工作表里面选中的那部分区域。

关于Excel,如果遇到了什么问题,都可以进行留言,看到以后会第一时间进行回复。

如果觉得好,也欢迎分享给更多的人,一起学习进步。

记Excel模板导出并转为PDF,支持批量打包下载。

记Excel模板导出并转为PDF,支持批量打包下载。

记Excel模板导出并转为PDF,⽀持批量打包下载。

最近项⽬⽤到了PDF导出,主要是后端完成,主要是个⼈不会设计PDF模板,效果太丑了,就想到了⽤Excel转PDF,且不⽤再设置样式,在模板中设置好了就可以直接套⽤了,记录下简单思路:1. ⽤excel设计好模板,因为涉及到多个表格需要动态插⼊数据,所以需要注意表格⾏列的计算。

2. 将excel转为PDF⽂档。

3. 若是存在多个PDF,则进⾏ZIP打包再提供下载,基于spring boot提供下载。

⾸先是excel模板样式预览PDF预览下载预览⾸先引⼊依赖<!-- https:///artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.2</version></dependency><!-- https:///artifact/com.itextpdf/itext-asian --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!-- https:///artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency><!-- https:///artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.0.0</version></dependency>服务层代码/*** PDF导出** @param form 表单* @param response 响应* @throws DocumentException 异常* @throws IOException 异常*/public void pdfExport(BaseForm form, HttpServletResponse response) throws DocumentException, IOException {//将zip以流的形式输出到前台response.setContentType("application/octet-stream");String keyword = form.getKeyword();ApiRegisterVo vo = null;if (StringUtils.isNotBlank(keyword)) {vo = JSON.parseObject(keyword, ApiRegisterVo.class);}// 数据列表List<ApiRegisterVo> vos = findList(vo);if (ObjectUtils.isNotEmpty(vos)) { // 不为空才导出if (vos.size() == 1) { // 单⽂件导出ApiRegisterVo temp = vos.get(0);ApiRegisterDetailVo detailVo = detail(temp.getId(), vo.getGatewayAddress());response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(detailVo.getName() + System.currentTimeMillis(), "UTF-8") + ".pdf");Workbook workbook = excelService.openGatewayApiWorkbook(detailVo);byte[] bytes = ExcelToPdfUtil.excelToPdf(workbook, false, 0.8f);response.getOutputStream().write(bytes);} else { // 批量压缩导出// pdf数据包列表List<Map<String, byte[]>> dataPackage = new ArrayList<>();// 单个数据,key为⽂件名Map<String, byte[]> map;// ⽂件设置,附件形式打开response.setHeader("content-disposition", "attachment; filename="+ URLEncoder.code("GatewayInfo" + System.currentTimeMillis(), "UTF-8") + ".zip");for (ApiRegisterVo registerVo : vos) {ApiRegisterDetailVo detailVo = detail(registerVo.getId(), vo.getGatewayAddress());Workbook workbook = excelService.openGatewayApiWorkbook(detailVo);byte[] bytes = ExcelToPdfUtil.excelToPdf(workbook, false, 0.8f);map = new HashMap<>();map.put(detailVo.getName() + System.currentTimeMillis() + ".pdf", bytes);dataPackage.add(map);}byte[] zipByte = ZipUtil.batchZipByte(dataPackage);response.getOutputStream().write(zipByte);}response.flushBuffer();}}excel导出⽅法/*** 根据模板导出excel** @param vo 数据列表* @return⼯作簿*/public Workbook openGatewayApiWorkbook(ApiRegisterDetailVo vo) throws IOException {String templatePath = "template/openGatewayApi.xlsx";Workbook workbook = ExcelUtils.getWorkBook(templatePath);// 字体信息assert workbook != null;Font font = workbook.createFont();font.setFontName("宋体");font.setBold(true);font.setFontHeightInPoints((short) 12);CellStyle workbookCellStyle = workbook.createCellStyle();workbookCellStyle.setWrapText(true);workbookCellStyle.setFont(font);workbookCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 写⼊第⼀页sheet中Sheet sheet0 = workbook.getSheetAt(0);// 名称setMergedCellValue(sheet0, 0, 0, vo.getName());// 基本信息,固定⾏信息优先填写好setMergedCellValue(sheet0, 2, 1, vo.getName());setMergedCellValue(sheet0, 3, 1, vo.getMethods());setMergedCellValue(sheet0, 4, 1, vo.getPath());setMergedCellValue(sheet0, 5, 1, vo.getRequestUrl() == null ? "" : vo.getRequestUrl());setMergedCellValue(sheet0, 6, 1, vo.getVersion() == null ? "" : vo.getVersion());setMergedCellValue(sheet0, 7, 1, vo.getNote() == null ? "" : vo.getNote());setMergedCellValue(sheet0, 15, 0, vo.getRequestParamsExample() == null ? "": vo.getRequestParamsExample().getExample() == null ? "" : vo.getRequestParamsExample().getExample());setMergedCellValue(sheet0, 22, 0, vo.getPathParamsExample() == null ? "": vo.getPathParamsExample().getExample() == null ? "" : vo.getPathParamsExample().getExample());setMergedCellValue(sheet0, 30, 0, vo.getResponseParamsExample() == null ? "": vo.getResponseParamsExample().getExample() == null ? "" : vo.getResponseParamsExample().getExample()); setMergedCellValue(sheet0, 34, 2, vo.getMoreStateCodeUrl() == null ? "" : vo.getMoreStateCodeUrl());// 请求头List<ApiParams> requestHeaderParams = vo.getRequestHeaderParams();// 记录请求头动态添加的⾏数int requestHeaderParamsAddRow = 0;// 请求参数List<ApiParams> requestParams = vo.getRequestParams();// 记录请求参数动态添加的⾏数int requestParamsAddRow = 0;// 路径参数List<ApiParams> pathParams = vo.getPathParams();// 记录路径参数动态添加的⾏数int pathParamsAddRow = 0;// 响应头List<ApiParams> responseHeaderParams = vo.getResponseHeaderParams();// 记录响应头动态添加的⾏数int responseHeaderParamsAddRow = 0;// 响应参数List<ApiParams> responseParams = vo.getResponseParams();// 记录响应参数动态添加的⾏数int responseParamsAddRow = 0;// 状态码List<ApiErrcode> apiErrcodes = vo.getApiErrcodes();// 记录状态码动态添加的⾏数int apiErrcodesAddRow = 0;// 表格数据填充if (ObjectUtils.isNotEmpty(requestHeaderParams)) { // 请求头// 计算起始⾏和获取样式⾏int startRow = 11;// 样式⾏requestHeaderParamsAddRow = getParamsAddRow(sheet0, requestHeaderParams, requestHeaderParamsAddRow, startRow);}if (ObjectUtils.isNotEmpty(requestParams)) { // 请求参数// 计算起始⾏,原14+请求头添加⾏int startRow = 14 + (Math.max(requestHeaderParamsAddRow - 1, 0));// 样式⾏Row styleRow = sheet0.getRow(startRow - 1);if (requestParams.size() > 1) { // 动态插⼊⾏sheet0.shiftRows(startRow, sheet0.getLastRowNum(), requestParams.size() - 1, true, false);}requestParamsAddRow = getParamsAddRow(sheet0, requestParams, requestParamsAddRow, startRow, styleRow);}if (ObjectUtils.isNotEmpty(pathParams)) { // 路径参数// 计算起始⾏,原21+请求头添加⾏+请求参数添加⾏int startRow = 21 + (Math.max(requestHeaderParamsAddRow - 1, 0)) + (Math.max(requestParamsAddRow - 1, 0));// 样式⾏Row styleRow = sheet0.getRow(startRow - 1);pathParamsAddRow = getParamsAddRow(sheet0, pathParams, pathParamsAddRow, startRow, styleRow);}if (ObjectUtils.isNotEmpty(responseHeaderParams)) { // 响应头// 计算起始⾏,原26+请求头添加⾏+请求参数添加⾏+路径参数添加⾏int startRow = 26 + (Math.max(requestHeaderParamsAddRow - 1, 0)) + (Math.max(requestParamsAddRow - 1, 0))+ (Math.max(pathParamsAddRow - 1, 0));// 样式⾏Row styleRow = sheet0.getRow(startRow - 1);if (responseHeaderParams.size() > 1) { // 动态插⼊⾏sheet0.shiftRows(startRow, sheet0.getLastRowNum(), pathParams.size() - 1, true, false);}for (ApiParams apiParams : responseHeaderParams) {// 插⼊的⾏号int rowNum = responseHeaderParamsAddRow + (startRow - 1);Row newRow = sheet0.getRow(rowNum) == null ? sheet0.createRow(rowNum) : sheet0.getRow(rowNum);newRow.setRowStyle(styleRow.getRowStyle());newRow.setHeight(styleRow.getHeight());Cell cell0 = getCell(newRow, 0);cell0.setCellStyle(getCell(styleRow, 0).getCellStyle());cell0.setCellValue(apiParams.getName());Cell cell1 = getCell(newRow, 1);cell1.setCellStyle(getCell(styleRow, 1).getCellStyle());cell1.setCellValue(apiParams.getExample() == null ? "" : apiParams.getExample());Cell cell2 = getCell(newRow, 2);cell2.setCellStyle(getCell(styleRow, 2).getCellStyle());Cell cell3 = getCell(newRow, 3);cell3.setCellStyle(getCell(styleRow, 3).getCellStyle());cell3.setCellValue(apiParams.getNote() == null ? "" : apiParams.getNote());Cell cell4 = getCell(newRow, 4);cell4.setCellStyle(getCell(styleRow, 4).getCellStyle());if (!ExcelUtils.isMergedRegion(sheet0, newRow.getRowNum(), cell1.getColumnIndex())) {// 合并单元格CellRangeAddress cellAddresses1 = new CellRangeAddress(newRow.getRowNum(), newRow.getRowNum(), cell1.getColumnIndex(), cell2.getColumnIndex()); sheet0.addMergedRegion(cellAddresses1);}if (!ExcelUtils.isMergedRegion(sheet0, newRow.getRowNum(), cell3.getColumnIndex())) {// 合并单元格CellRangeAddress cellAddresses2 = new CellRangeAddress(newRow.getRowNum(), newRow.getRowNum(), cell3.getColumnIndex(), cell4.getColumnIndex()); sheet0.addMergedRegion(cellAddresses2);}responseHeaderParamsAddRow++;}}if (ObjectUtils.isNotEmpty(responseParams)) { // 响应参数// 计算起始⾏,原29+请求头添加⾏+请求参数添加⾏+路径参数添加⾏+响应头参数添加⾏int startRow = 29 + (Math.max(requestHeaderParamsAddRow - 1, 0)) + (Math.max(requestParamsAddRow - 1, 0))+ (Math.max(pathParamsAddRow - 1, 0)) + (Math.max(responseHeaderParamsAddRow - 1, 0));// 样式⾏responseParamsAddRow = getParamsAddRow(sheet0, responseParams, responseParamsAddRow, startRow);}if (ObjectUtils.isNotEmpty(apiErrcodes)) { // API状态码// 计算起始⾏,原37+请求头添加⾏+请求参数添加⾏+路径参数添加⾏+响应头参数添加⾏+响应参数添加⾏int startRow = 37 + (Math.max(requestHeaderParamsAddRow - 1, 0)) + (Math.max(requestParamsAddRow - 1, 0))+ (Math.max(pathParamsAddRow - 1, 0)) + (Math.max(responseHeaderParamsAddRow - 1, 0))+ (Math.max(responseParamsAddRow - 1, 0));Row styleRow = sheet0.getRow(startRow - 1);if (apiErrcodes.size() > 1) { // 动态插⼊⾏,此表格最后⾏为空⾏,会⽆法识别到,所以从上⼀⾏开始下移插⼊sheet0.shiftRows(startRow - 1, sheet0.getLastRowNum(), apiErrcodes.size() - 1, true, false);}for (ApiErrcode errcode : apiErrcodes) {// 插⼊的⾏号int rowNum = apiErrcodesAddRow + (startRow - 1);Row newRow = sheet0.getRow(rowNum) == null ? sheet0.createRow(rowNum) : sheet0.getRow(rowNum);newRow.setRowStyle(styleRow.getRowStyle());newRow.setHeight(styleRow.getHeight());Cell cell0 = getCell(newRow, 0);cell0.setCellStyle(getCell(styleRow, 0).getCellStyle());cell0.setCellValue(errcode.getCode());Cell cell1 = getCell(newRow, 1);cell1.setCellStyle(getCell(styleRow, 1).getCellStyle());cell1.setCellValue(errcode.getNote() == null ? "" : errcode.getNote());Cell cell2 = getCell(newRow, 2);cell2.setCellStyle(getCell(styleRow, 2).getCellStyle());Cell cell3 = getCell(newRow, 3);cell3.setCellStyle(getCell(styleRow, 3).getCellStyle());apiErrcodesAddRow = getCodeAddRow(sheet0, apiErrcodesAddRow, styleRow, newRow, cell1);}}workbook.close();return workbook;}/*** 合并单元格** @param sheet0 ⼯作簿* @param addRow 添加⾏* @param styleRow 样式⾏* @param newRow 插⼊⾏* @param cell1 单元格* @return添加⾏*/private int getCodeAddRow(Sheet sheet0, int addRow, Row styleRow, Row newRow, Cell cell1) {Cell cell4 = getCell(newRow, 4);cell4.setCellStyle(getCell(styleRow, 4).getCellStyle());if (!ExcelUtils.isMergedRegion(sheet0, newRow.getRowNum(), cell1.getColumnIndex())) {// 合并单元格CellRangeAddress cellAddresses = new CellRangeAddress(newRow.getRowNum(), newRow.getRowNum(), cell1.getColumnIndex(), cell4.getColumnIndex()); sheet0.addMergedRegion(cellAddresses);}addRow++;return addRow;}/*** 提取重复项** @param sheet0 ⼯作簿* @param paramsList 参数列表* @param addRow 添加⾏* @param startRow 样式⾏* @param styleRow 样式⾏* @return参数添加⾏*/private int getParamsAddRow(Sheet sheet0, List<ApiParams> paramsList, int addRow, int startRow, Row styleRow) {for (ApiParams apiParams : paramsList) {// 插⼊的⾏号int rowNum = addRow + (startRow - 1);Row newRow = sheet0.getRow(rowNum) == null ? sheet0.createRow(rowNum) : sheet0.getRow(rowNum);newRow.setRowStyle(styleRow.getRowStyle());newRow.setHeight(styleRow.getHeight());// 插⼊数据Cell cell0 = getCell(newRow, 0);cell0.setCellStyle(getCell(styleRow, 0).getCellStyle());cell0.setCellValue(apiParams.getName());Cell cell1 = getCell(newRow, 1);cell1.setCellStyle(getCell(styleRow, 1).getCellStyle());cell1.setCellValue(apiParams.getRequired());Cell cell2 = getCell(newRow, 2);cell2.setCellStyle(getCell(styleRow, 2).getCellStyle());cell2.setCellValue(apiParams.getDataType());Cell cell3 = getCell(newRow, 3);cell3.setCellStyle(getCell(styleRow, 3).getCellStyle());cell3.setCellValue(apiParams.getExample() == null ? "" : apiParams.getExample());Cell cell4 = getCell(newRow, 4);cell4.setCellStyle(getCell(styleRow, 4).getCellStyle());cell4.setCellValue(apiParams.getNote() == null ? "" : apiParams.getNote());addRow++;}return addRow;}/*** 提取重复项** @param sheet0 ⼯作簿* @param paramsList 参数列表* @param addRow 添加⾏* @param startRow 开始⾏* @return参数添加⾏*/private int getParamsAddRow(Sheet sheet0, List<ApiParams> paramsList, int addRow, int startRow) {Row styleRow = sheet0.getRow(startRow - 1);if (paramsList.size() > 1) { // 动态插⼊⾏sheet0.shiftRows(startRow, sheet0.getLastRowNum(), paramsList.size() - 1, true, false);}for (ApiParams apiParams : paramsList) {// 插⼊的⾏号int rowNum = addRow + (startRow - 1);Row newRow = sheet0.getRow(rowNum) == null ? sheet0.createRow(rowNum) : sheet0.getRow(rowNum); newRow.setRowStyle(styleRow.getRowStyle());newRow.setHeight(styleRow.getHeight());Cell cell0 = getCell(newRow, 0);cell0.setCellStyle(getCell(styleRow, 0).getCellStyle());cell0.setCellValue(apiParams.getName());Cell cell1 = getCell(newRow, 1);cell1.setCellStyle(getCell(styleRow, 1).getCellStyle());cell1.setCellValue(apiParams.getRequired());Cell cell2 = getCell(newRow, 2);cell2.setCellStyle(getCell(styleRow, 2).getCellStyle());cell2.setCellValue(apiParams.getExample() == null ? "" : apiParams.getExample());Cell cell3 = getCell(newRow, 3);cell3.setCellStyle(getCell(styleRow, 3).getCellStyle());cell3.setCellValue(apiParams.getNote() == null ? "" : apiParams.getNote());addRow = getCodeAddRow(sheet0, addRow, styleRow, newRow, cell3);}return addRow;}/*** 设置合并单元格值** @param sheet ⼯作表* @param row ⾏* @param column 列* @param value 值*/private void setMergedCellValue(Sheet sheet, int row, int column, Object value) {Cell cell = ExcelUtils.getMergedRegion(sheet, row, column);if (cell != null && value != null) {cell.setCellValue(ExcelUtils.getCellValue(cell) + value);}}excel⼯具类package com.edp.gateway.open.utils;import ng3.StringUtils;import ermodel.HSSFClientAnchor;import ermodel.HSSFPicture;import ermodel.HSSFShape;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.ooxml.POIXMLDocumentPart;import ermodel.Cell;import ermodel.CellType;import ermodel.PictureData;import ermodel.Row;import ermodel.Sheet;import ermodel.Workbook;import org.apache.poi.ss.util.CellRangeAddress;import ermodel.XSSFClientAnchor;import ermodel.XSSFDrawing;import ermodel.XSSFPicture;import ermodel.XSSFShape;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; import org.springframework.core.io.ClassPathResource;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.List;import java.util.Map;public class ExcelUtils {/*** 获取excel** @param filePath ⽂件路径* @return Workbook*/public static Workbook getWorkBook(String filePath) {if (StringUtils.isBlank(filePath)) {return null;}Workbook workbook = null;try {ClassPathResource cpr = new ClassPathResource(filePath);try (InputStream is = cpr.getInputStream()) {if (filePath.endsWith("xls")) {// 2003workbook = new HSSFWorkbook(is);} else if (filePath.endsWith("xlsx")) {// 2007workbook = new XSSFWorkbook(is);}}} catch (IOException e) {e.printStackTrace();}return workbook;}/*** 读取excel中的图⽚和位置** @param workbook excel* @param sheet ⼯作表* @return Map<String, PictureData>*/public static Map<String, PictureData> getPictures(Workbook workbook, Sheet sheet) { Map<String, PictureData> map = new HashMap<>();if (workbook instanceof HSSFWorkbook) {map = getPictures2003((HSSFSheet) sheet);} else if (workbook instanceof XSSFWorkbook) {map = getPictures2007((XSSFSheet) sheet);}return map;}/*** 读取excel中的图⽚和位置(xls)** @param sheet ⼯作表* @return Map<String, PictureData>*/public static Map<String, PictureData> getPictures2003(HSSFSheet sheet) {Map<String, PictureData> map = new HashMap<>();List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();for (HSSFShape shape : list) {if (shape instanceof HSSFPicture) {HSSFPicture picture = (HSSFPicture) shape;HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();// ⾏号-列号String key = cAnchor.getRow1() + "-" + cAnchor.getCol1();map.put(key, picture.getPictureData());}}return map;}/*** 读取excel中的图⽚和位置(xlsx)** @param sheet ⼯作表* @return Map<String, PictureData>*/public static Map<String, PictureData> getPictures2007(XSSFSheet sheet) { Map<String, PictureData> map = new HashMap<>();List<POIXMLDocumentPart> list = sheet.getRelations();for (POIXMLDocumentPart part : list) {if (part instanceof XSSFDrawing) {XSSFDrawing drawing = (XSSFDrawing) part;List<XSSFShape> shapes = drawing.getShapes();for (XSSFShape shape : shapes) {if (shape instanceof XSSFPicture) {XSSFPicture picture = (XSSFPicture) shape;XSSFClientAnchor anchor = picture.getPreferredSize();CTMarker marker = anchor.getFrom();String key = marker.getRow() + "-" + marker.getCol();map.put(key, picture.getPictureData());}}}}return map;}/*** 获取excel中每列宽度的占⽐** @param sheet ⼯作表* @return float[]*/public static float[] getColWidth(Sheet sheet) {int rowNum = getMaxColRowNum(sheet);Row row = sheet.getRow(rowNum);int cellCount = row.getPhysicalNumberOfCells();int[] colWidths = new int[cellCount];int sum = 0;for (int i = row.getFirstCellNum(); i < cellCount; i++) {Cell cell = row.getCell(i);if (cell != null) {colWidths[i] = sheet.getColumnWidth(i);sum += sheet.getColumnWidth(i);}}float[] colWidthPer = new float[cellCount];for (int i = row.getFirstCellNum(); i < cellCount; i++) {//对数字进⾏操作前先校验是否为0if (sum != 0) {colWidthPer[i] = (float) colWidths[i] / sum * 100;}}return colWidthPer;}/*** 获取合并单元格** @param sheet ⼯作表* @param row ⾏* @param column 列* @return Cell*/public static Cell getMergedRegion(Sheet sheet, int row, int column) {int sheetMergeCount = sheet.getNumMergedRegions();for (int i = 0; i < sheetMergeCount; i++) {CellRangeAddress ca = sheet.getMergedRegion(i);int firstColumn = ca.getFirstColumn();int lastColumn = ca.getLastColumn();int firstRow = ca.getFirstRow();int lastRow = ca.getLastRow();if (row >= firstRow && row <= lastRow) {if (column >= firstColumn && column <= lastColumn) {Row fRow = sheet.getRow(firstRow);return fRow.getCell(firstColumn);}}}return null;}/*** 获取单元格的值** @param cell 单元格* @return String*/public static String getCellValue(Cell cell) {if (cell == null) {return "";}if (cell.getCellType() == CellType.STRING) {return cell.getStringCellValue();} else if (cell.getCellType() == CellType.BOOLEAN) {return String.valueOf(cell.getBooleanCellValue());} else if (cell.getCellType() == CellType.FORMULA) {return cell.getCellFormula();} else if (cell.getCellType() == CellType.NUMERIC) {double value = cell.getNumericCellValue();return String.valueOf((long) value);}return "";}/*** 判断指定的单元格是否是合并单元格** @param sheet ⼯作表* @param row ⾏下标* @param column 列下标* @return boolean*/public static boolean isMergedRegion(Sheet sheet, int row, int column) {int sheetMergeCount = sheet.getNumMergedRegions();for (int i = 0; i < sheetMergeCount; i++) {CellRangeAddress range = sheet.getMergedRegion(i);int firstColumn = range.getFirstColumn();int lastColumn = range.getLastColumn();int firstRow = range.getFirstRow();int lastRow = range.getLastRow();if (row >= firstRow && row <= lastRow) {if (column >= firstColumn && column <= lastColumn) {return true;}}}return false;}/*** 获取合并单元格宽⾼** @param sheet ⼯作表* @param row ⾏* @param column 列* @return int[]*/public static float[] getMergedRegionSize(Sheet sheet, int row, int column) { int[] matrix = getMergedRegionMatrix(sheet, row, column);float[] size = new float[2];// 合并单元格⾼float height = 0;// 合并单元格宽float width = 0;for (int y = matrix[0]; y <= matrix[2]; y++) {Row rowY = sheet.getRow(y);if (rowY != null) {height += sheet.getRow(y).getHeightInPoints();}}for (int x = matrix[1]; x <= matrix[3]; x++) {width += sheet.getColumnWidthInPixels(x);}size[0] = height;size[1] = width;return size;}/*** 获取合并单元格矩阵** @param sheet ⼯作表* @param row ⾏* @param column 列* @return int[]*/public static int[] getMergedRegionMatrix(Sheet sheet, int row, int column) { int sheetMergeCount = sheet.getNumMergedRegions();int[] matrix = new int[4];for (int i = 0; i < sheetMergeCount; i++) {CellRangeAddress ca = sheet.getMergedRegion(i);int firstColumn = ca.getFirstColumn();int lastColumn = ca.getLastColumn();int firstRow = ca.getFirstRow();int lastRow = ca.getLastRow();if (row >= firstRow && row <= lastRow) {if (column >= firstColumn && column <= lastColumn) {matrix[0] = firstRow;matrix[1] = firstColumn;matrix[2] = lastRow;matrix[3] = lastColumn;break;}}}return matrix;}/*** 计算合并单元格合并的跨⾏跨列数** @param sheet ⼯作表* @param row ⾏* @param column 列* @return int[]*/public static int[] getMergedSpan(Sheet sheet, int row, int column) {int sheetMergeCount = sheet.getNumMergedRegions();int[] span = {1, 1};for (int i = 0; i < sheetMergeCount; i++) {CellRangeAddress range = sheet.getMergedRegion(i);int firstColumn = range.getFirstColumn();int lastColumn = range.getLastColumn();int firstRow = range.getFirstRow();int lastRow = range.getLastRow();if (firstColumn == column && firstRow == row) {span[0] = lastRow - firstRow + 1;span[1] = lastColumn - firstColumn + 1;break;}}return span;}/*** 获取excel中列数最多的⾏号** @param sheet ⼯作表* @return int*/private static int getMaxColRowNum(Sheet sheet) {int rowNum = 0;int maxCol = 0;for (int r = sheet.getFirstRowNum(); r < sheet.getPhysicalNumberOfRows(); r++) { Row row = sheet.getRow(r);if (row != null && maxCol < row.getPhysicalNumberOfCells()) {maxCol = row.getPhysicalNumberOfCells();rowNum = r;}}return rowNum;}}excel转pdf⼯具类package com.edp.gateway.open.utils;import com.itextpdf.text.BaseColor;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Element;import com.itextpdf.text.Font;import com.itextpdf.text.Image;import com.itextpdf.text.PageSize;import com.itextpdf.text.Phrase;import com.itextpdf.text.Rectangle;import com.itextpdf.text.pdf.BaseFont;import com.itextpdf.text.pdf.PdfPCell;import com.itextpdf.text.pdf.PdfPTable;import com.itextpdf.text.pdf.PdfWriter;import ermodel.BorderStyle;import ermodel.Cell;import ermodel.CellStyle;import ermodel.PictureData;import ermodel.Row;import ermodel.Sheet;import ermodel.Workbook;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.Map;public class ExcelToPdfUtil {/*** ⽤excel⽣成PDF** @param workbook excel⼯作表* @param isRotate 横向或纵向显⽰* @param zoom 缩放⽐例* @return byte[]*/public static byte[] excelToPdf(Workbook workbook, boolean isRotate, float zoom)throws DocumentException, IOException {Sheet sheet = workbook.getSheetAt(0);// 获取excel中的图⽚Map<String, PictureData> pictureDataMap = ExcelUtils.getPictures(workbook, sheet);ByteArrayOutputStream os = new ByteArrayOutputStream();// 创建PDFDocument document = new Document();Rectangle pageSize;if (isRotate) {// 横向显⽰pageSize = new Rectangle(PageSize.A4.getHeight(), PageSize.A4.getWidth());} else {// 纵向显⽰pageSize = new Rectangle(PageSize.A4.getWidth(), PageSize.A4.getHeight());}document.setPageSize(pageSize);PdfWriter.getInstance(document, os);//设置页边距document.setMargins(0, 0, 15, 15);document.open();// Table获取每列所占百分⽐float[] widths = ExcelUtils.getColWidth(sheet);int colCount = widths.length;// 创建TablePdfPTable pTable = new PdfPTable(widths);// 设置Table占页⾯的百分⽐pTable.setWidthPercentage(92);// 设置基本字体BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 遍历Excel的⾏和列读取数据for (int r = sheet.getFirstRowNum(); r < sheet.getPhysicalNumberOfRows(); r++) {Row row = sheet.getRow(r);// 为空时创建默认单元格if (row == null) {PdfPCell pCell = new PdfPCell(new Phrase(""));pCell.setBorder(0);pCell.setMinimumHeight(13);pTable.addCell(pCell);} else {for (int c = row.getFirstCellNum(); (c < row.getLastCellNum() || c < colCount); c++) {if (c > row.getPhysicalNumberOfCells()) {PdfPCell pCell = new PdfPCell(new Phrase(""));pCell.setBorder(0);pTable.addCell(pCell);continue;}Cell cell = row.getCell(c);if (cell == null) {continue;}// 获取单元格的值String value = ExcelUtils.getCellValue(cell);// 获取Excel单元格的样式CellStyle cellStyle = cell.getCellStyle();// 获取Excel单元格的字体ermodel.Font excelFont = workbook.getFontAt(cellStyle.getFontIndex());// 设置PDF单元格字体Font pFont = new Font(baseFont, excelFont.getFontHeightInPoints() * zoom,excelFont.getBold() ? Font.BOLD : Font.NORMAL, BaseColor.BLACK);// 处理图⽚// 拼接图⽚的keyString pictureKey = r + "-" + c;PdfPCell pCell;if (pictureDataMap.containsKey(pictureKey)) {// 如果是图⽚则给PDF单元格设置图⽚PictureData pictureData = pictureDataMap.get(pictureKey);Image image = Image.getInstance(pictureData.getData());float percent = 0.8f;if (ExcelUtils.isMergedRegion(sheet, r, c)) {float[] size = ExcelUtils.getMergedRegionSize(sheet, r, c);image.scaleToFit(size[0] * percent, size[1] * percent);} else {image.scaleToFit(row.getHeightInPoints() * percent,sheet.getColumnWidthInPixels(cell.getColumnIndex()) * percent);}pCell = new PdfPCell(image, true);} else {pCell = new PdfPCell(new Phrase(value, pFont));}// 设置对齐⽅式pCell.setHorizontalAlignment(getHorAlignment(cellStyle.getAlignment().getCode()));pCell.setVerticalAlignment(getVerAlignment(cellStyle.getVerticalAlignment().getCode()));// 设置最⼩⾼度pCell.setMinimumHeight(row.getHeightInPoints() * zoom);// 判断是否合并单元格if (ExcelUtils.isMergedRegion(sheet, r, c)) {int[] span = ExcelUtils.getMergedSpan(sheet, r, c);// 忽略合并过的单元格if (span[0] == 1 && span[1] == 1) {continue;}pCell.setRowspan(span[0]);pCell.setColspan(span[1]);// 跳过合并过的单元格c = c + span[1] - 1;}// 设置边框setBorder(pCell, sheet, r, c);pTable.addCell(pCell);}}}document.add(pTable);document.close();byte[] pdfByte = os.toByteArray();os.close();return pdfByte;}/*** 设置PDF边框** @param pCell pdf单元格* @param sheet ⼯作表* @param row ⾏* @param column 列*/private static void setBorder(PdfPCell pCell, Sheet sheet, int row, int column) {Cell cell;boolean isMergedRegion = ExcelUtils.isMergedRegion(sheet, row, column);if (isMergedRegion) {cell = ExcelUtils.getMergedRegion(sheet, row, column);} else {cell = sheet.getRow(row).getCell(column);}assert cell != null;CellStyle cellStyle = cell.getCellStyle();if (BorderStyle.NONE.equals(cellStyle.getBorderTop())) {// 隐藏上边框pCell.disableBorderSide(1);}if (BorderStyle.NONE.equals(cellStyle.getBorderBottom())) {// 隐藏下边框pCell.disableBorderSide(2);。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

excel是我们经常会使用到的一类文档格式,较为常用。

但在传输excel文件的时候发现文档打开后经常会出现乱码的情况。

然而造成文档乱码的原因有很多,解决起来不是那么的方便。

所以很多个人或企业在传输excel文件时会选择将excel转pdf然后再进行传递。

如果有不了解如何把excel转pdf方法的小伙伴可以跟随小编一起转换哟!
excel转pdf:
想要把excel转pdf的方法有很多,但是在转换质量上参差不齐,因此小编使用了自身较为常用迅捷PDF转换器的‘excel转pdf’功能进行转换。

当PDF转换器功能切换到所需的excel转pdf界面后把准备好的excel文件添加到右侧指定位置。

添加的方式有很多种,任选其中一种方式进行添加就可以了。

随后添加好的一个或多个excel文件会在指定位置呈现出来,此时我们点击右下角的‘开始转换’按钮即可把添加好的excel转pdf。

在excel转pdf前如果不想把转换后的文件保存到默认位置,则可以通过输出目录的浏览按钮进行调整。

拓展:
除了上述使用PDF转换器把excel转pdf的方法外,还可以使用支持excel转pdf的在线网站进行,而我们首先要做的则是选择好对应的excel转图片功能。

随后网站会根据所选功能跳转到指定页面,这时我们要‘点击选择文件’把pdf 文档添加到指定位置。

除此之外还可以使用拖拽的方式直接把excel文档拖拽到指定区域。

而后通过页码选择调整excel文档想要转换的页码,接着点击开始转换按钮就可以把添加好的excel文档转换成pdf格式。

excel转pdf该如何实现?通过以上一个转换方法和一个拓展方法你学会了吗,当excel文档转换成为pdf格式后将会更好地避免文件出现乱码的情况。

希望以上转换方法可以帮助到你哟!。

相关文档
最新文档