2009-04-03 40 views
18

Câu hỏi cơ bản: Làm cách nào để tải mẫu Excel để sử dụng với POI và sau đó lưu nó vào tệp XLS?Sử dụng các mẫu Excel với Apache POI

Edit:

Câu trả lời là:

FileInputStream inputStream = new FileInputStream(new File(templateFile)); 
Workbook workbook = new HSSFWorkbook(inputStream); 

(. Chỉ cần nạp mẫu như một workbook và sau đó viết bảng tính dưới dạng XLS nơi khác)

Trả lời

15

Các bạn đã thử tải nó lên như một tiêu chuẩn .xls bằng cách sử dụng POI, sửa đổi nó và sau đó lưu nó?

Đây là cách tiếp cận mà tôi đã sử dụng để chèn macro vào tệp .xls do POI tạo. Tôi tạo ra các tập tin với các macro (thừa nhận là một .xls) và sau đó tải nó vào ứng dụng của tôi, cư với dữ liệu và lưu như một .xls mới được tạo ra. Tất cả đều ổn.

+0

tôi đã cố gắng như vậy để tải macro với poi 3.13 và 3.15 nhưng nó không hiệu quả với tôi. Ý tôi là sau khi lưu tập tin, các macro bị thiếu. Bạn còn ý kiến ​​nào không? –

10

Bạn có thể tải trực tiếp một .xls sẽ hoạt động như mẫu và sửa đổi nó.

POIFSFileSystem fs = new POIFSFileSystem(
       new FileInputStream("template.xls")); 
HSSFWorkbook wb = new HSSFWorkbook(fs, true); 

Sẽ tải một xls, bảo toàn cấu trúc của nó (bao gồm macro). Sau đó, bạn có thể sửa đổi nó,

HSSFSheet sheet1 = wb.getSheet("Data"); 
... 

và sau đó lưu.

FileOutputStream fileOut = new FileOutputStream("new.xls"); 
wb.write(fileOut); 
fileOut.close(); 

Hy vọng điều này sẽ hữu ích.

3

Bạn cũng có thể sử dụng mẫu nội bộ làm tài nguyên.

InputStream fis = ChartSample.class.getResourceAsStream("/templates.xls"); 
HSSFWorkbook wb = new HSSFWorkbook(fis);   
fis.close(); 
HSSFSheet sh = wb.getSheetAt(0); 
//Here you go 

Và lưu rằng:

out = new FileOutputStream("./new.xls"); 
wb.write(out); 
out.close(); 
2

Bạn có thể tạo một tập tin XLS từ một mẫu XLS.

Nhưng, để thực hiện việc này, bạn cần tạo bản sao của mẫu mỗi lần bạn cần sử dụng mẫu. Nếu không, bạn sẽ chỉnh sửa mẫu gốc (những gì bạn không muốn).

Vì vậy, bạn cần đầu tiên lấy mẫu tập tin của bạn:

URL url = Thread.currentThread().getContextClassLoader().getResource("templates/template.xls"); 
File file = new File(url.getPath()); 

Sao chép tập tin mẫu:

try (FileOutputStream fileOutputStream = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) { 

    Files.copy(file.toPath(), fileOutputStream); 

    Workbook workbook = new HSSFWorkbook(); 
    workbook.write(fileOutputStream); 
} 

truy cập các tập tin sao chép mới:

FileInputStream inp = new FileInputStream("/home/jake/fileCopiedFromTemplate.xls"); 

Tạo một Workbook, để bạn có thể viết vào tệp mới của mình:

Workbook workbook = WorkbookFactory.create(inp); 

Sau khi ghi trong bảng tính của bạn:

try (FileOutputStream fileOut = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) { 
    workbook.write(fileOut); 
} 

Một mẹo để tạo ra một XLS file mẫu là đánh dấu các mẫu với một số biến cho bạn khoanh vùng vị trí mà bạn muốn để điền vào.Giống như:

------------------------------------ 
| | Columna A  | Column B  | 
------------------------------------ 
| 1 | Some description   | 
------------------------------------ 
| 2 | {person.name} | {person.age} | 
------------------------------------ 
2

Đối với excel-files với .xlsx sử dụng như sau:

FileInputStream inputStream = new FileInputStream(new File("template.xlsx")); 
     @SuppressWarnings("resource") 
     Workbook wb = new XSSFWorkbook(inputStream); 
     Sheet sheet = wb.getSheet("sheet1"); 
0

Bạn có thể sử dụng XSSF bằng cách thêm phụ thuộc poi-OOXML trong pom.xml maven của bạn nếu bạn muốn lưu nó trong năm 2007 + định dạng.

Nếu bạn có template.xlsx tập tin với một tờ tóm tắt trong XMLs này và bạn muốn thay đổi một tế bào đặc biệt mà bạn có thể làm điều đó như:

XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("template.xlsx"));   
FileOutputStream fileOut = new FileOutputStream("new.xlsx"); 
XSSFSheet sheet1 = wb.getSheet("Summary"); 
XSSFRow row = sheet1.getRow(15); 
XSSFCell cell = row.getCell(3); 
cell.setCellValue("Bharthan"); 

wb.write(fileOut); 
log.info("Written xls file"); 
fileOut.close(); 
Các vấn đề liên quan