2017-01-09 767 views
0

いくつかの行と列がロックされ、残りは編集可能なExcelファイルを作成する必要があります。私はこれが尋ねられ答えられたことを知っていますが、最新の答えは2012年からあり、そこに与えられた解決策はこれ以上働きません。これを使って作業している人なら、今すぐ使える解決策が得られますか?POIでいくつかのExcelセル/行をロックする編集可能

これは今溶液

String file = "c:\\poitest.xlsx"; 
FileOutputStream outputStream = new FileOutputStream(file); 
Workbook wb = new XSSFWorkbook(); 

CellStyle unlockedCellStyle = wb.createCellStyle(); 
unlockedCellStyle.setLocked(false); 

Sheet sheet = wb.createSheet(); 
sheet.protectSheet("password"); 
Row row = sheet.createRow(0); 
Cell cell = row.createCell(0); 
cell.setCellValue("TEST"); 
cell.setCellStyle(unlockedCellStyle); 

wb.write(outputStream); 
outputStream.close(); 

ような効果を与えられたコードが完全にロックされたシートです。

+0

申し訳ありませんが、Apacheを再現することはできませんpoi 3.15 final、Excel 2016.あなたのコードは、保護されたシート "Sheet0"を含むブックを生成しますが、セル "A1"は編集可能です。 –

答えて

2

あなたは、特定のセルをロックしたいと思いますが、デフォルトはロックを解除する必要がありますが、コードは実際には特定のセルのロックを解除します。

だから私はあなたの元の要求のために行くと、私は列の全範囲を設定するクイックビューにまともな方法を発見していないよう迅速なハックのようなものを持っている:

import java.io.FileOutputStream; 

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.CellStyle; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol; 

public class XSSFLockTest { 
    public static void main(String args[]) throws Exception { 
     XSSFWorkbook wb = new XSSFWorkbook(); 

     CellStyle unlockedCellStyle = wb.createCellStyle(); 
     unlockedCellStyle.setLocked(false); 

     CellStyle lockedCellStyle = wb.createCellStyle(); 
     lockedCellStyle.setLocked(true); 

     XSSFSheet sheet = wb.createSheet(); 
     CTCol col = sheet.getCTWorksheet().getColsArray(0).addNewCol(); 
     col.setMin(1); 
     col.setMax(16384); 
     col.setWidth(9.15); 
     col.setStyle(unlockedCellStyle.getIndex()); 

     sheet.protectSheet("password"); 

     Row row = sheet.createRow(0); 
     Cell cell = row.createCell(0); 
     cell.setCellValue("TEST"); 
     cell.setCellStyle(lockedCellStyle); 

     FileOutputStream outputStream = new FileOutputStream("bla.xlsx"); 
     wb.write(outputStream); 
     outputStream.close(); 
    } 
} 
+0

@ katrin-krabbes:これで問題が解決したら、答えを受け入れてください... – kiwiwings