当我运行此代码时:
<cfscript>
flinstones = "fred,wilma,pebbles";
Workbook = Spreadsheetnew("Workbook");
for (i = 1; i lte listlen(flinstones); i ++) {
ThisFlinstone = ListGetAt(Flinstones, i);
if (ThisFlinstone == "wilma")
SpreadSheetAddRow(Workbook, "#ThisFlinstone#,barney");
else
SpreadSheetAddRow(Workbook, ThisFlinstone);
}
Format = {};
format.rightborder = "thin";
SpreadsheetFormatColumn(WorkBook, Format, 2);
MYfile = "d:\dw\dwtest\dan\abc.xls";
writedump(format);
</cfscript>
<cfspreadsheet action="write" filename="#MYFile#" name="Workbook"
sheet=1 sheetname="flinstones" overwrite=true>
我希望看到一个包含三行的工作表。第二行将有两列,单元格中有wilma和barney。到目前为止,我看到了我的期望。我还希望看到B栏右手边框。我实际上看到右边界的B2格式。
如果我改变了这个:
SpreadSheetAddRow(Workbook, ThisFlinstone);
到这个
SpreadSheetAddRow(Workbook, "#ThisFlinstone#, ");
我看到B列的前三行有右边框。
有没有办法让右手边框适用于所有B列?
答案 0 :(得分:1)
<强>更新强>
丹在评论中提到,我误解了这个问题。为了澄清,我最后检查的POI不支持向整个列添加边框。使边框显示在整个列上的唯一方法是首先填充该列中的每个单元格。通过明确设置值或使用SpreadsheetFormatCellRange(sheet, format, 1, 2, maxRow, 2)
B1
来设置值。虽然这确实有效,但我不推荐它,因为它有一些maximum row number。
有没有办法让右手边框适用于所有B列?
简答:
是的,通过执行您已经发现的内容:首先为所有单元格B2
,B3
和 <cfset SpreadsheetFormatCellRange(Workbook, Format, 1, 2, 3, 2)>
赋予一个值。即使它只是一个空白或空字符串。这将在所有三个单元格上创建边框。
更新1:如果您使用的是CF 9.0.1,则另一个选项是undesirable side effects。与大多数电子表格函数不同,它首先自动创建不存在的单元格:
Cell
更长的回答:
要应用格式,您需要POI调用SpreadsheetFormatCellRange
对象。创建新工作表时,它是完全空白的,没有任何“单元格”。在大多数情况下,当您使用各种函数之一(即SpreadSheetSetCellValue
,SpreadSheetAddRow
等等设置值时,CF仅创建Cell
对象。 (见下面的例子)。您的原始代码仅在B列中设置一个值。因此,它只创建一个B2
,即SpreadsheetFormatColumn
。 B2
仅格式化现有单元格,因此边框仅在<!--- blank sheet with no CELLS --->
<cfset Workbook = Spreadsheetnew() />
<cfset SpreadSheetWrite(Workbook, "c:/test.xls", true) />
<cfspreadsheet action="read" src="c:/test.xls" query="qValues" />
<cfdump var="#qValues#" label="No cells exist yet" />
<!--- setting one value, creates one CELL --->
<cfset Workbook = Spreadsheetnew() />
<cfset SpreadSheetAddRow(Workbook, "Fred") />
<cfset SpreadSheetWrite(Workbook, "c:/test.xls", true) />
<cfspreadsheet action="read" src="c:/test.xls" query="qValues" />
<cfdump var="#qValues#" label="Creates a single cell" />
<!--- setting two values, creates two CELL's --->
<cfset Workbook = Spreadsheetnew() />
<cfset SpreadSheetAddRow(Workbook, "Fred, ") />
<cfset SpreadSheetWrite(Workbook, "c:/test.xls", true) />
<cfspreadsheet action="read" src="c:/test.xls" query="qValues" />
<cfdump var="#qValues#" label="Creates two cells" />
中可见。
{{1}}