2009-04-03 11 views
18

Pytanie podstawowe: Jak załadować szablon Excel do użytku z UM, a następnie zapisać go w pliku XLS?Używanie szablonów programu Excel z Apache POI

Edit:

Odpowiedź brzmi:

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

(. Wystarczy załadować szablon jako skoroszyt i zapisać skoroszyt jako plik XLS gdzie indziej)

Odpowiedz

15

Próbowałeś ładowanie go jako standard .xls za pomocą POI, zmieniając go, a następnie zapisując?

To jest podejście, którego użyłem do wstawienia makr do pliku .xls generowanego przez POI. Tworzę plik z makrem (wprawdzie jako .xls), a następnie ładuję go do mojej aplikacji, zapełniam danymi i zapisuję jako nowo utworzony .xls. Że wszystko działało dobrze.

+0

Próbowałem to samo załadowanie makra z poi 3,13 i 3,15 , ale to nie działa dla mnie. Mam na myśli po zapisaniu pliku, brakuje makr. Masz jakiś pomysł? –

10

Możesz bezpośrednio załadować plik .xls, który będzie działał jako szablon i zmodyfikować go.

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

Załaduje xls, zachowując jego strukturę (włącznie z makrami). Następnie można go zmodyfikować, a następnie zapisać, a następnie go zmodyfikować.

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

Mam nadzieję, że to pomoże.

3

Możesz również użyć wewnętrznego szablonu jako zasobu.

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

I zapisać, że:

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

Można utworzyć plik XLS z szablonu XLS.

Ale aby to zrobić, należy utworzyć kopię szablonu za każdym razem, gdy trzeba użyć szablonu. Jeśli nie, edytujesz oryginalny szablon (czego nie chcesz).

Tak, trzeba najpierw uzyskać plik szablonu:

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

Skopiuj plik szablonu:

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

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

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

dostęp nowy skopiowany plik:

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

Tworzenie Workbook, więc możesz pisać w nowym pliku:

Workbook workbook = WorkbookFactory.create(inp); 

Po napisać w skoroszycie:

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

Końcówka utworzyć plik szablonu XLS to zaznaczyć szablon z jakiejś zmiennej na lokalizowanie pozycji, które chcesz wypełnić.Jak:

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

Dla Excel plików z .xlsx użyć następujących:

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

Można użyć XSSF dodając zależność POI-OOXML w maven pom.xml jeśli chcesz zapisać go w 2007 roku + format.

Jeśli masz template.xlsx plik arkusza zbiorczego w tym plików XML i chcesz zmienić konkretną komórkę można to zrobić jak:

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(); 
Powiązane problemy