注意 |
---|
提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。 |
示例说明
电子表格在excel中对字段设置了自动换行后,在excel端的打印效果与在浏览器端的打印效果不一致。
...
1.首先要明确,对于Excel来说,行高和自动换行这两个功能是冲突的。在没有人为调整过行高的情况下,设置自动换行时,Excel中的数据是能够自动换行的。如下:
但是如果人为调整了行高,那么再设置自动换行,是不会生效的。Excel以设置的行高进行展示,不会再根据自动换行所需要的行高去进行调整了。如下:如果先设置的自动换行,再调整行高。也是以人为设置的行高为主
2.因此如果要实现自动换行,且自动调整行高的效果。需要先将人为设置的行高修改回原始默认的行高。如何修改呢?
(1)先将这一行所有单元格的已设置的“自动换行”取消
(2)将鼠标放在行号的下方,比如要调整第3行的行高,则将鼠标放在第3行和第4行的中间那根分界线上,然后双击,即可讲人为设置的行高取消。
...
(4)可选中单元格,然后在“开始”-》“格式”中,勾选“自动调整行高”
3.对于合并了行的单元格来说,自动换行的行高无法确保一定能够自动适应。
...
设置步骤
1.了解了Excel自动换行和行高等前提条件之后,我们需要在Excel中打开电子表格
2.对于该电子表格中,如果不需要自动换行,只要固定行高的行,我们可以手动设置一下行高。比如类别这一行,不需要自动换行。且要固定行高,因此可以右键设置一下行高。(注:若不设置行高,后续使用的宏代码会自动调整行高)
3.对于需要自动换行的单元格所在的行,根据“前提”中的信息。先将这一行的所有单元格的自动换行取消掉,并且调整行高回到原始的行高
然后再次设置“自动换行”和“自动调整行高”
4.一般情况下,通过上面的设置已经能够解决打印时效果不正确的问题。若打印仍有问题,可增加如下宏代码,做强制处理
...
类型 | 对象 | 事件 |
---|---|---|
ServerSide | spreadsheetReport | onBeforeOutput |
...
宏代码1
代码块 | ||||
---|---|---|---|---|
| ||||
function main(spreadsheetReport) { spreadsheetReport.workbook.worksheets.get(0).autoFitRows(true); } |
另:如果使用上面的报表宏还无法解决,可尝试使用下面的报表宏解决。
宏类型
...
类型 | 对象 | 事件 |
---|---|---|
ServerSide | spreadsheetReport | onBeforeOutput |
...
以上两种方式若是还是没有办法解决,可尝试参考如下宏代码:
宏类型
...
类型 | 对象 | 事件 |
---|---|---|
ServerSide | spreadsheetReport | onBeforeOutput |
宏代码3
...
代码块 | ||||
---|---|---|---|---|
| ||||
function main(spreadsheetReport) { var options = Packages.com.aspose.cells.AutoFitterOptions(); //options.setAutoFitMergedCells(true); //spreadsheetReport.workbook.worksheets.get(0).autoFitRows(options); var cells = spreadsheetReport.workbook.worksheets.get(0).getCells(); //一行字体高度 var perRowHeight = 13.5; //需要调整的单元格,每个单元格中一行多少字 // var cell_B4perRowCharCount = 17; var cell_C4perRowCharCount = 17; // var cell_D4perRowCharCount = 17; if (spreadsheetReport.outputType == "PDF" || spreadsheetReport.outputType == "PRINT") { logger.debug("pdf"); //fixExpandCells(cells, "B4", cell_B4perRowCharCount, perRowHeight); //需要调整的单元格 fixExpandCells(cells, "C4", cell_C4perRowCharCount, perRowHeight); // fixExpandCells(cells, "D4", cell_D4perRowCharCount, perRowHeight); } } function fixExpandCells(cells, pos, perRowCharCount, perRowHeight) { var expandedCells = spreadsheetReport.sheets[0].getExpandedPositions(pos); for (var i = 0; i < expandedCells.length; i++) { var eCell = expandedCells[i]; var fixCell = cells.get(eCell.row, eCell.column); fixCellHeight(cells, fixCell, perRowCharCount, perRowHeight); } } function fixCellHeight(cells, cell, perRowCharCount, perRowHeight) { var fontSize = cell.getDisplayStyle().getFont().getSize(); var mergedCount = 1; if (cell.getMergedRange() != null) { cell.getMergedRange().getColumnCount(); } var cellColumn = cell.getColumn(); var totalWidth = 0; for (var i = 0; i < mergedCount; i++) { var colWidth = cells.getColumnWidthPixel(i + cellColumn); //logger.debug(i + " is " + colWidth); totalWidth += colWidth; } var value = cell.getValue(); if (value != null) { var values = value.split("\\n"); var height = 0; for (var i = 0; i < values.length; i++) { var cellRowCount = (values[i].length() / perRowCharCount); var calHeight = Math.ceil(cellRowCount) * perRowHeight; height += calHeight; } var oldHeight = cells.getRowHeight(cell.getRow()); if (height > oldHeight) { if (height < 409) { cells.setRowHeight(cell.getRow(), height); } else { cells.setRowHeight(cell.getRow(), 409); } } } } |
...