2017-04-14 71 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罐子使用

相關問題