ラジPerumalsamy:
私は、Java Apacheのポイを使用してExcelの表を挿入しようとしています。しかし、ときに私はそれが次のエラーを投げていると私はそれを解決できなかったのxlsxファイルを開いています:
Removed Part: /xl/tables/table1.xml part with XML error. (Table) Load error. Line 2
repaired records: table from /xl/tables/table1.xml part (table)
私のコードは以下の通りであります:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFTable;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTable;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumn;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumns;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyleInfo;
public class Test {
public static void main(String[] args) throws FileNotFoundException, IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Architecture");
XSSFTable table = sheet.createTable();
CTTable cttable = table.getCTTable();
cttable.setDisplayName("Table1");
cttable.setId(1);
cttable.setName("Test");
cttable.setRef("A1:C11");
cttable.setTotalsRowShown(false);
CTTableStyleInfo styleInfo = cttable.addNewTableStyleInfo();
styleInfo.setShowColumnStripes(false);
styleInfo.setShowRowStripes(true);
CTTableColumns columns = cttable.addNewTableColumns();
columns.setCount(3);
for (int i = 1; i <= 3; i++) {
CTTableColumn column = columns.addNewTableColumn();
column.setId(i);
column.setName("Column" + i);
}
try (FileOutputStream outputStream = new FileOutputStream("C:\\Office\\TimeSheet\\JavaBooks.xlsx")) {
workbook.write(outputStream);
}
}
}
どのように私は、ApacheのJavaポイを使用してMicrosft Excelで表を挿入することができますか?
アクセル・リヒター:
テーブルの列名のシートのセル内の少なくともコンテンツが存在する必要があります。あなたのケースでは、細胞A1:C1
シートでは、Architecture
コンテンツを持っている必要があります。旧バージョンでは apache poi
、このコンテンツテーブルの列名と一致する必要がありました。今セルの内容を設定し、現在のバージョンでは、テーブルの列名を更新します。
あなたのコードでは、仕事に拡張しました:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFTable;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTable;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumn;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumns;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyleInfo;
public class ExcelTableTest {
public static void main(String[] args) throws FileNotFoundException, IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Architecture");
XSSFTable table = sheet.createTable();
//XSSFTable table = sheet.createTable(null); //since apache poi 4.0.0
CTTable cttable = table.getCTTable();
cttable.setDisplayName("Table1");
cttable.setId(1);
cttable.setName("Test");
cttable.setRef("A1:C11");
cttable.setTotalsRowShown(false);
CTTableStyleInfo styleInfo = cttable.addNewTableStyleInfo();
styleInfo.setName("TableStyleMedium2");
styleInfo.setShowColumnStripes(false);
styleInfo.setShowRowStripes(true);
CTTableColumns columns = cttable.addNewTableColumns();
columns.setCount(3);
for (int i = 1; i <= 3; i++) {
CTTableColumn column = columns.addNewTableColumn();
column.setId(i);
column.setName("Column" + i);
}
for (int r = 0; r < 2; r++) {
XSSFRow row = sheet.createRow(r);
for(int c = 0; c < 3; c++) {
XSSFCell cell = row.createCell(c);
if(r == 0) { //first row is for column headers
cell.setCellValue("Column"+ (c+1)); //content **must** be here for table column names
} else {
//cell.setCellValue("Data R"+ (r+1) + "C" + (c+1));
}
}
}
try (FileOutputStream outputStream = new FileOutputStream("ExcelTableTest.xlsx")) {
workbook.write(outputStream);
}
}
}