pageoffice提取線上開啟的excel表格資料

爱吃苹果皮發表於2024-04-02

轉載:提取表格區域資料

# 提取表格區域資料

  • 檢視本示例演示效果
  • 本示例關鍵程式碼的編寫位置
    • Vue+Springboot

注意

本文中展示的程式碼均為關鍵程式碼,複製貼上到您的專案中,按照實際的情況,例如文件路徑,使用者名稱等做適當修改即可使用。

在實際的開發過程中,經常會遇到提取Excel文件中資料儲存到資料庫中的需求,PageOffice客戶端控制元件支援線上儲存Excel檔案時,打包Excel文件中的指定單元格的資料或所有的資料提交到伺服器端,在伺服器端建立PageOffice的ExcelReader名稱空間中的Workbook物件,就可以獲取到Excel單元格中的資料。

# 後端程式碼

在後端編寫程式碼呼叫webOpen方法以表單提交模式xlsSubmitForm開啟檔案,建立Sheet物件並操作一塊區域(Table),並命名,比如:Info。

設定接收處理PageOffice客戶端控制元件提交資料的伺服器端後臺方法為:saveData

PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
Workbook workBook = new Workbook();
Sheet sheet = workBook.openSheet("Sheet1");
Table table = sheet.openTable("B4:F13");//設定Table物件的操作區域
table.setSubmitName("Info");//設定table物件的提交名稱,以便儲存頁面獲取提交的資料
poCtrl.setWriter(workBook);//此行必須
poCtrl.setSaveDataPage("saveData");//此行必須
//webOpen的第一個引數支援能夠輸出下載檔案的Url相對地址或者檔案在伺服器上的磁碟路徑兩種方式
//檢視詳細,請在本站搜尋“PageOffice屬性或方法中涉及到的URL路徑或磁碟路徑的說明”
poCtrl.webOpen("D:\\documents\\test.xlsx", OpenModeType.xlsSubmitForm, "張三");

在伺服器端後臺方法saveData中,建立com.zhuozhengsoft.pageoffice.excelreader名稱空間中的Workbook物件,提取各單元格資料。您可以在此方法中編寫程式碼,把獲取到的資料儲存到對應的資料庫表中。

Workbook workBook = new Workbook(request, response);
Sheet sheet = workBook.openSheet("Sheet1");
Table table = sheet.openTable("Info");//Info為開啟檔案時設定的SubmitName
String content = "";
int result = 0;
while (!table.getEOF()) {
    //獲取提交的數值
    if (!table.getDataFields().getIsEmpty()) {
        content += "<br/>Product: "
                + table.getDataFields().get(0).getText();
        content += "<br/>Plan: "
                + table.getDataFields().get(1).getText();
        content += "<br/>Real: "
                + table.getDataFields().get(2).getText();
        content += "<br/>Total: "
                + table.getDataFields().get(3).getText();
        if (table.getDataFields().get(2).getText().equals(null)
                || table.getDataFields().get(2).getText().trim().length() == 0
        ) {
            content += "<br/>Rate: 0%";
        } else {
            float f = Float.parseFloat(table.getDataFields().get(2)
                    .getText());
            f = f / Float.parseFloat(table.getDataFields().get(1).getText());
            DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
            content += "<br/>Rate: " + df.format(f * 100) + "%";
        }
        content += "<br/>*********************************************";
    }
    //迴圈進入下一行
    table.nextRow();
}
table.close();
// 非必須。此處只是為了展示一下後臺獲取到的各個單元格資料
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println(content);
workBook.showPage(500, 400); 
workBook.close();

# 前端程式碼

本示例無前端關鍵程式碼。

相關文章