如何创建具有受保护单元格的 cf电子表格



我正在使用cfspreadsheet创建一个电子表格对象。希望将某些单个单元格设置为受保护(只读)。如果有人以前尝试过,请告诉我。

我确实尝试将单元格格式设置为锁定,但它似乎不起作用。下面是示例代码:

<cfset a = spreadsheetnew()>
<cfset format1 = structNew()>
<cfset format1.locked=true>
<cfset SpreadsheetFormatCell(a,format1,1,1)>
<cfspreadsheet action="write" filename="#expandpath('.')#/test.xls" name="a" overwrite="true">

谢谢。

锁定单元格不会执行任何操作,除非工作表受到保护,即使用 cfspreadsheet 的 password 属性。但是这样做有一些负面的副作用...

保护纸张可锁定所有单元格。这意味着您基本上必须通过应用格式来"解锁"其他所有内容。理论上,您可以解锁整个工作表:

<cfset SpreadsheetFormatCellRange (sheet, {locked=false}, 1, 1, maxRow, maxCol)>

但是,这会产生填充工作表中每个单元格的令人讨厌的效果。因此,如果将文件读入查询,则查询将包含 ~65,536 行和 256 列。即使您只显式填充了几个单元格。

锁定

功能更适合您希望锁定除几个单元格之外的所有内容(而不是相反)的情况。除非这是你正在做的事情,否则考虑到所有负面的副作用,我可能不会打扰它。

副作用示例

    <cfset testFile = "c:/test.xls">
    <cfset sheet = spreadsheetNew()>
    <!--- only unlocking 100 rows to demonstrate --->
    <cfset SpreadsheetFormatCellRange (sheet, {locked=false}, 1, 1, 100, 10)>
    <!--- populate two cells --->
    <cfset SpreadsheetSetCellValue(sheet,"LOCKED",1,1)>
    <cfset SpreadsheetSetCellValue(sheet,"UNLOCKED",2,1)>
    <!--- make one cell locked --->
    <cfset SpreadsheetFormatCell(sheet, {locked=true}, 1, 1)>
    <cfspreadsheet action="write"
            name="sheet"
            fileName="#testFile#"
            password="" 
            overwrite="true" >
    <!--- now see it is filled with empty cells --->    
    <cfspreadsheet action="read"
            query="sheetData"
            src="#testFile#" >
    <cfdump var="#sheetData#" label="Lots of empty cells" />

相关内容

最新更新