4

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">

ありがとう。

4

1 に答える 1

5

シートが保護されていない限り、つまり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" />
于 2012-10-02T22:36:43.063 に答える