Raj*_*amy 2 java xlsx jexcelapi apache-poi
我正在尝试使用Java Apache Poi在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)
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用Apache Java Poi在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3193 次 |
| 最近记录: |