リストデータを1つのブックの複数のExcelシートに書き込もうとしています。最初のリストの場合と同様に、コードは新しいワークブックを作成し、list [1]の新しいシートを作成し、2番目のリストの場合、既存のワークブックに新しいシートを作成します。だから私は以下のコードを書いた。しかし、それは機能せず、リスト[1]の最初のシートしか見ることができません。誰かが私に別の解決策を提供するのを手伝ってもらえますか?
私が書いた以下のコード
ArrayList<List<String>> tempresultdata=this.getSummaryList();
HSSFWorkbook workbook = new HSSFWorkbook();
String fileName="Path\\To\\XLS";
File file = new File(fileName);
FileOutputStream out;
if(!file.exists()) // This will create new workbook with new sheet if it doesnt exists{
HSSFSheet mySheet = workbook.createSheet(sheetname);
writeExcel(mySheet,tempresultdata);
} else // This add new sheet to above created workbook {
try {
HSSFWorkbook myWorkBook = (HSSFWorkbook) WorkbookFactory.create(file);
workbook=myWorkBook;
HSSFSheet mySheet = (HSSFSheet) workbook.createSheet(sheetname);
writeExcel(mySheet,tempresultdata);
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try{
out = new FileOutputStream(fileName,true);
workbook.write(out);
out.close();
}catch(Exception e){
e.printStackTrace();
}
ありがとう、Priyank Shah
ファイルが存在しない場合、このコードは新しいファイルを作成し、サンプルsheet1も作成しますが、ファイルが存在する場合は、既存のExcelファイルに新しいシートを追加します。
HSSFWorkbook workbook = null;
File file = new File(context.getExternalFilesDir(null), "Sample.xls");
FileOutputStream fileOut = new FileOutputStream(file);
if (file.exists()) {
try {
workbook = (HSSFWorkbook)WorkbookFactory.create(file);
} catch (InvalidFormatException e) {
e.printStackTrace();
}
HSSFSheet sheet = workbook.createSheet("Sample sheet2");
}
else{
workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sample sheet1");
}
workbook.write(fileOut);
fileOut.close();
sheet
ではなくworkbook
のみを書き込んでいるようです
複数のExcelシートを新しいExcelファイルに追加するには、それらのシートを1つのブックから作成し、ファイル出力ストリームに1回書き込む必要があります。
import Java.io.*;
import Java.util.*;
import org.Apache.poi.ss.usermodel.*;
import org.Apache.poi.xssf.usermodel.*;
public class JustATest {
public static void main(String[] args) throws Exception {
XSSFWorkbook AWorkbook = new XSSFWorkbook(); //Create blank workbook
for (int i = 0; i < 10; i++) {
XSSFSheet spreadsheet = AWorkbook.createSheet(" Employee "+i);
// the follwing code is to create dummy data in sheets
// is similar to the one at tutorialPoint.com
XSSFRow row;
//This data needs to be written (Object[])
Map < String, Object[] > empinfo = new TreeMap< String, Object[] >();
empinfo.put( "1", new Object[] { "EMP ID", "EMP NAME", "DESIGNATION" });
for (int j = 0; j < i; j++) {
empinfo.put( j+2+"", new Object[] { j+2+"", "Fadel K", "Technical Manager" });
}
//Iterate over data and write to sheet
Set<String> keyid = empinfo.keySet();
int rowid = 0;
for (String key : keyid){
row = spreadsheet.createRow(rowid++);
Object [] objectArr = empinfo.get(key);
int cellid = 0;
for (Object obj : objectArr){
Cell cell = row.createCell(cellid++);
cell.setCellValue((String)obj);
}
}
// dummy data creation over.
}
// here you write all sheets at once, by writing the entier workbook
FileOutputStream out = new FileOutputStream(new File("AllData.xlsx"));
AWorkbook.write(out);
out.close();
}
}
既存のワークブックで作業している間は、ファイルオブジェクトを作成しないでください。ファイルの場所をFileInputStream
オブジェクトに指定し、その参照をワークブックオブジェクトに渡してから、既存のファイルでやりたいことをすべて実行する必要があります。シートを追加するには、createMethodコマンドを使用するだけです。
public void AddsheetintoExistingworkbook(String sheetname) throws IOException, InvalidFormatException{
//***************************Add a sheet into Existing workbook***********************************************
String path="C:\\Workspace\\Selenium_2.53\\src\\InputFiles\\Temp.xlsx";
fileinp = new FileInputStream(path);
workbook = new XSSFWorkbook(fileinp);
workbook.createSheet(sheetname);
fileOut = new FileOutputStream(path);
workbook.write(fileOut);
fileOut.close();
System.out.println("File is written successfully");
}
Bhaskarのコードを使用して問題を解決し、WorkbookFactoryを使用するには、poi-ooxml-3.7.jarファイルをダウンロードする必要があります。
ここにあなたのためのリンクがあります:
http://grepcode.com/snapshot/repo1.maven.org/maven2/org.Apache.poi/poi-ooxml/3.7