Hi All,

I am trying to create table in an excel sheet , when opening excel i get
message "We found problem with some content in excel, would you like to
recover".
When we open the exel file I do see the table with column but still i get
error
"Repair to Excel"
Removed Part: /xl/tables/table1.xml part with XML error. (Table) Load
error. Line 2, column 345.

Not sure what is the issue with code , I am using POI 5.2.2 , below is the
code , can you please let me know what is wrong with the code.

*import* org.apache.poi.ss.SpreadsheetVersion;

*import* org.apache.poi.ss.util.AreaReference;

*import* org.apache.poi.ss.util.CellReference;

*import* org.apache.poi.xssf.usermodel.XSSFCell;

*import* org.apache.poi.xssf.usermodel.XSSFRow;

*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* CreateTablePOI3 {



       *private* *static* *void* createTable(XSSFSheet sheet, List<String>
colNames) {



              CellReference startCellReference = *new* CellReference(0, 0);

              // CellReference endCellReference = new CellReference(2,
colNames.size()); //one

              // column too wide

              CellReference endCellReference = *new* CellReference(2,
colNames.size() - 1);

              // AreaReference areaReference

              //
=xssfWorkBook.getCreationHelper().createAreaReference(startCellReference,

              // endCellReference);

              AreaReference areaReference = *new* AreaReference(
startCellReference, endCellReference,

                           SpreadsheetVersion.*EXCEL2007*);

              XSSFTable table = sheet.createTable(areaReference);

              CTTable cttable = table.getCTTable();

//

//       CellReference startCellReference = new CellReference(0, 0);

//       //CellReference endCellReference = new CellReference(2,
colNames.size()); //one column too wide

//       CellReference endCellReference = new CellReference(2,
colNames.size()-1);



              cttable.setDisplayName("SummaryData_" + sheet.getSheetName());

              // cttable.setId(1); // Don't set table's Id manually. The
sheet.createTable()

              // is doing that properly.

              cttable.setName("SummaryData_" + sheet.getSheetName());

              // cttable.setRef(areaReference.formatAsString());

              cttable.setTotalsRowShown(*false*);



              CTTableStyleInfo styleInfo = cttable.addNewTableStyleInfo();

              styleInfo.setName("TableStyleMedium13");

              styleInfo.setShowColumnStripes(*false*);

              styleInfo.setShowRowStripes(*true*);



              CTTableColumns columns = cttable.addNewTableColumns();

              columns.setCount(colNames.size());

              *for* (*int* i = 1; i <= colNames.size(); i++) {

                     CTTableColumn column = columns.addNewTableColumn();

                     column.setId(i);

                     column.setName(colNames.get(i - 1));

              }

       }



       *public* *static* *void* main(String[] args) *throws* Exception {



              List<String> sheetNames = Arrays.*asList*("Sheet1", "Sheet2",
"Sheet3");



              XSSFWorkbook workbook = *new* XSSFWorkbook();

              *for* (String sheetName : sheetNames) {

                     XSSFSheet sheet = workbook.createSheet(sheetName);

                     List<String> colNames = Arrays.*asList*("Column1",
"Column2", "Column3");



                     *createTable*(sheet, colNames);



                     *for* (*int* r = 0; r <= 2; r++) {

                           XSSFRow row = sheet.createRow(r);

                           *for* (*int* c = 0; c < colNames.size(); c++) {

                                  XSSFCell cell = row.createCell(c);

                                  // cell.setCellValue("some value");
//sheet's cell values must match the table's

                                  // column names

                                  *if* (r == 0) {

                                         cell.setCellValue(colNames.get(c));

                                  } *else* {

                                         cell.setCellValue("some value");

                                  }

                           }

                     }

                     *for* (*int* i = 0; i < colNames.size(); i++) {

                           sheet.autoSizeColumn(i);

                     }

              }



              FileOutputStream out = *new* FileOutputStream("test.xlsx");

              workbook.write(out);

              out.close();

              workbook.close();

       }

}



-- 



*Thanks & Regards Vickyb*

Reply via email to