2013-08-01 61 views
3

我正在使用Aspose-Cells和java在我的系统中导出excel模板。是否有可能解锁受保护工作表中的特定单元格(使用Aspose)

在这种特殊情况下,我生成了一个电子表格,其中有两张要保护的表格。 其中之一,我需要让用户只编辑4个单元格。其余的都应该受到保护。 最简单的实现应该是:

  1. 保护工作表
  2. 解锁每个小区我想让用户编辑。

问题是我正在检查是否有可能做到这一点(保护整个工作表并仅解锁几个单元格),而且似乎无法进行。请告诉我我错了,有办法做到这一点,否则我将不得不锁定工作表中的所有现有单元格,并只解锁其中的4个单元。对于使用其他库(PHPExcel)的经验,它在性能方面似乎非常昂贵(我必须将它应用于1000行和40列以上,因此成本非常高)。

+0

ASPOSE在这方面不能像Excel那样工作(即所有的单元格都被默认锁定 - * un *在应用保护之前锁定了4个单元格)? – pnuts

+0

我没有听说过aspose-cells自己,所以我不知道我是否阅读正确的文档,但在这里:http://www.aspose.com/docs/display/cellsjava/Style有一个'setLocked(booleanvalue)''方法...是的,我认为pnuts是正确的,因为'Excel'默认为所有单元格被锁定 – chancea

+0

@chancea是不是只适用于单元格样式?我的意思是......我不确定,但它似乎锁定/解锁单元格中的编辑样式。无论如何,我要检查它.. – periback2

回答

2

使用Aspose.Cells for Java可以轻松完成。您可以

  1. 首先锁定所有列(所有单元)在一个工作表
  2. 解锁特定的细胞或细胞

的范围请参见下面的示例。

String dataDir = "D:\\data\\"; 
// Create or load workbook 
Workbook book = new Workbook(); 

// Get the first worksheet 
Worksheet sheet = book.getWorksheets().get(0); 

Style style; 
StyleFlag flag = new StyleFlag(); 

// First lock all columns 
for (int iCol=0 ; iCol<255 ; iCol++) 
{ 
    // Get style of the column 
    style = sheet.getCells().getColumns().get(iCol).getStyle(); 
    // Apply locking to the style 
    style.setLocked(true); 
    flag.setLocked(true); 
    sheet.getCells().getColumns().get(iCol).applyStyle(style, flag); 
} 

// Get the range of cells, which we want to unlock 
Range rangeUnlocked = sheet.getCells().createRange("A1:D4"); 
// Add a new style 
int styleIndex = book.getStyles().add(); 
Style styleUnlocked = book.getStyles().get(styleIndex); 
// Unlock cells 
styleUnlocked.setLocked(false); 
rangeUnlocked.setStyle(styleUnlocked); 

// Protect the sheet 
sheet.protect(ProtectionType.ALL); 

//Save the Excel file 
book.save(dataDir + "protectedrange.xlsx"); 

我在阅读Aspose工作作为一个开发者传播者。

相关问题