轉載:提取表格區域資料
# 提取表格區域資料
- 檢視本示例演示效果
- 本示例關鍵程式碼的編寫位置
- 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();
# 前端程式碼
本示例無前端關鍵程式碼。