2013-08-01 4 views
3

Я использую Aspose-Cells и java для экспорта шаблонов excel в свою систему.Можно ли разблокировать определенные ячейки на защищенном листе (используя Aspose)

В этой конкретной ситуации я создаю электронную таблицу, где у меня есть два листа, которые я хочу защитить. В одном из них мне нужно разрешить пользователю редактировать только 4 ячейки. Все остальные должны быть защищены. Простейшая реализация должна быть:

  1. защитить лист
  2. разблокировки каждой ячейки Я хочу, чтобы позволить пользователю редактировать.

Проблема в том, что я пытался проверить, можно ли это сделать (защитить весь лист и разблокировать только несколько ячеек), и это кажется невозможным. Пожалуйста, скажите мне, что я ошибаюсь, и есть способ сделать это, иначе мне придется заблокировать все существующие ячейки на листе и разблокировать только 4 из них. Для моего опыта использования другой библиотеки (PHPExcel) это кажется очень дорогостоящим с точки зрения производительности (мне пришлось применить его для 1000 строк и более 40 столбцов, поэтому это было очень дорого).

+0

Не работает ли ASPOSE так, как это делает Excel в этом отношении (т.е. все блоки заблокированы по умолчанию - * un * заблокировать ваши 4 ячейки до того, как применить защиту)? – pnuts

+0

Я сам не слышал о ячейках aspose, поэтому я не знаю, читаю ли я правильную документацию, но здесь: http://www.aspose.com/docs/display/cellsjava/Style есть 'setLocked (booleanvalue)' метод ... и да Я предполагаю, что pnuts верна, потому что 'Excel' по умолчанию блокирует все ячейки – chancea

+0

@chancea - это не только применение стилей к ячейкам? Я имею в виду .. Я не очень уверен, но, похоже, блокирует/разблокирует стили редактирования в ячейке. Я собираюсь проверить это так или иначе. – periback2

ответ

2

Это можно сделать легко с помощью Aspose.Cells для 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 как разработчик-евангелист.