2

当我运行此代码时:

<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 列?

4

1 回答 1

1

更新:

正如丹在评论中提到的,我误读了这个问题。澄清一下,我上次检查的 POI 不支持为整个列添加边框。使边框出现在整个列上的唯一方法是首先填充该列中的每个单元格。通过显式设置值或使用SpreadsheetFormatCellRange(sheet, format, 1, 2, maxRow, 2)最大行数。虽然这确实有效,但我不推荐它,因为它有一些不良副作用


有没有办法让右侧边框适用于所有 B 列?

简短的回答:

是的,通过做你已经发现的事情:首先给出所有单元格 ie和B1一个值。即使它只是一个空白或空字符串。这将在所有三个单元格上创建一个边框。B2B3

更新 1:如果您使用的是 CF 9.0.1,另一个选项是SpreadsheetFormatCellRange. 与大多数电子表格函数不同,它首先会自动创建不存在的单元格:

    <cfset SpreadsheetFormatCellRange(Workbook, Format, 1, 2, 3, 2)>

更长的答案:

要应用格式,您需要 POI 所称的Cell对象。当您创建一个新工作表时,它完全是空白的,没有任何“单元格”。在大多数情况下,CF 仅Cell在您使用各种函数之一设置值时创建一个对象,例如SpreadSheetSetCellValue, SpreadSheetAddRow, 等等。(见下面的例子)。您的原始代码仅在 B 列中设置一个值。因此它仅创建一个Cell,即B2SpreadsheetFormatColumn仅格式化现有单元格,这就是为什么边框仅在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" />
于 2013-02-25T19:24:06.657 回答