を達成することができ:
は、すべての列のデフォルトスタイルとしてCellStyle
たsetLocked
偽を設定します。これは、そのスタイルを設定した最小列1と最大列16384を持つ要素org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol
を設定することで可能です。
次に、その行にCustomFormat
をtrueに設定して、そのスタイルを使用して1行目を取り出します。したがって、すべての列にデフォルトのスタイルは使用されません。さらに、CellStyle
には、その行のデフォルトスタイルとしてsetLocked
がtrueに設定されています。これは、その行からorg.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow
要素を取得し、そこにCustomFormat
とS
(スタイル)を設定することで可能です。
結果:全ての細胞は、行を除いてロックが解除されている1
例:
import java.io.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
public class CreateExcelSheetProtectOnlyFirstRow {
public static void main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
//create a CellStyle having setLocked false
CellStyle cellstyleUnprotect = workbook.createCellStyle();
cellstyleUnprotect.setLocked(false);
//create a CellStyle having setLocked true
CellStyle cellstyleProtect = workbook.createCellStyle();
cellstyleProtect.setLocked(true);
Sheet sheet = workbook.createSheet("Sheet1");
//set the CellStyle having setLocked false as the default style for all columns
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol cTCol =
((XSSFSheet)sheet).getCTWorksheet().getColsArray(0).addNewCol();
cTCol.setMin(1);
cTCol.setMax(16384);
cTCol.setWidth(12.7109375);
cTCol.setStyle(cellstyleUnprotect.getIndex());
Row row = sheet.createRow(0);
//set CustomFormat true for that row
//so it does not using the default style for all columns
//and set the CellStyle having setLocked true as the default style for that row
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow cTRow =
((XSSFRow)row).getCTRow();
cTRow.setCustomFormat(true);
cTRow.setS(cellstyleProtect.getIndex());
for (int c = 0; c < 3; c++) {
row.createCell(c).setCellValue("Header " + (c+1));
}
sheet.protectSheet("password"); // protect sheet
workbook.write(new FileOutputStream("CreateExcelSheetProtectOnlyFirstRow.xlsx"));
workbook.close();
}
}
「私はちょうどヘッダーは、ユーザーが編集できないようにしたい。」:その後、あなたはどのように使用してその要件を満たすでしょう ' ExcelのGUIですか?なぜなら、 'apache poi'は' Excel'自体ができないことをすることができないからです。 –
@Fabien編集のおかげで:) –