-1

我有一个 BI 报告,它需要源数据采用 XLS 格式的表格形式。

源数据每天都会从一个工具触发到我的系统。它采用 .xls 格式,但格式简单。将此数据输入我的 BI 报告时,必须将其转换为表格。

我不想每天手动更新 Excel 文件,而是想自动化这个过程。我有从客户端工具下载 Excel 文件并将其保存到本地系统的脚本。

因此,在一行中,我需要一种方法来执行以下操作:

输入:

前

期望的输出:

后

注意 - 我正在 C# windows 应用程序中编写脚本。

4

1 回答 1

0

以下是可以使用的示例 Java 代码。

    import org.apache.poi.ss.util.AreaReference;
    import org.apache.poi.ss.util.CellReference;
    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;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;

    public class Main{

        public static void main(String[] args) throws IOException {
            FileInputStream input_document = new FileInputStream(new File("C:\\Users\\x228458\\Desktop\\ExcelExample.xlsx"));
            XSSFWorkbook my_xlsx_workbook = new XSSFWorkbook(input_document);
            XSSFSheet sheet = my_xlsx_workbook.getSheetAt(0);
            int firstrowindex = sheet.getFirstRowNum();
            int lastrowindex = sheet.getLastRowNum();

            int firstcolumnindex = sheet.getRow(0).getFirstCellNum();
            int lastcolumnindex = sheet.getRow(0).getLastCellNum();
            int numberofcolumns=(lastcolumnindex-firstcolumnindex);

            XSSFTable my_table = sheet.createTable();
            CTTable cttable = my_table.getCTTable();
            CTTableStyleInfo table_style = cttable.addNewTableStyleInfo();
            table_style.setName("TableStyleMedium9");
            table_style.setShowColumnStripes(false);
            table_style.setShowRowStripes(true);
            AreaReference my_data_range = new AreaReference(new CellReference(firstrowindex, firstcolumnindex), new CellReference(lastrowindex, lastcolumnindex-1));
            cttable.setRef(my_data_range.formatAsString());
            cttable.setDisplayName("MYTABLE");
            cttable.setName("Test");
            cttable.setId(2L); //you can use any integer as Id

            CTTableColumns columns = cttable.addNewTableColumns();

            columns.setCount(numberofcolumns);
            for (int i = 0; i < numberofcolumns; i++)
            {
                CTTableColumn column = columns.addNewTableColumn();
                column.setName("Column" + i);
                column.setId(i+1);
            }
            FileOutputStream fileOut = new FileOutputStream("C:\\Users\\x228458\\Desktop\\Excel_Format_Table.xlsx");
            my_xlsx_workbook.write(fileOut);
            fileOut.close();
        }
    }

注意:使用 Apache poi 3.15 jars

于 2017-04-17T12:36:36.523 回答