Можно ли разблокировать определенные ячейки в защищенном листе (с использованием Aspose)

83
9

Я использую Aspose-Cells и java для экспорта шаблонов excel в свою систему.


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


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

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

спросил(а) 2013-08-01T17:30:00+04:00 7 лет, 4 месяца назад
1
Решение
72

Это можно легко сделать с помощью Aspose.Cells для Java. Вы можете


    Сначала заблокируйте все столбцы (все ячейки) на листе
    Разблокировать определенные ячейки или диапазон ячеек

См. образец ниже.

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 как евангелист-разработчик.

ответил(а) 2013-08-05T10:13:00+04:00 7 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема