2017-04-14 70 views
-1

我有一个BI报告,需要源数据以XLS格式的表格形式。将Excel工作表的内容转换为表格格式的C#脚本

源数据每天从工具触发到我的系统。它采用.xls格式,但格式简单。将这些数据提供给我的BI报告时,必须将其转换为表格。

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

所以在一行我需要一个方法,该方法将做如下:

输入:

BEFORE

所需的输出:

AFTER

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

回答

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罐子使用

相关问题