激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 高效數據傳輸:Java通過綁定快速將數據導出至Excel

高效數據傳輸:Java通過綁定快速將數據導出至Excel

2023-10-13 06:21未知服務器之家 Java教程

摘要:本文由葡萄城技術團隊于博客園原創并首發。轉載請注明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 前言 把數據導出至 Excel 是很常見的需求,而數據的持久化,往往又放在數

摘要:本文由葡萄城技術團隊于博客園原創并首發。轉載請注明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。

前言

把數據導出至 Excel 是很常見的需求,而數據的持久化,往往又放在數據庫中。因此把數據庫中的數據導出到 Excel中,成了非常普遍的一個需求。

以關系型數據庫為例,數據表是一個二維矩陣,但是為了易于操作和維護,在數據讀取中,都會定義類,并且以對象的形式在內存中存放數據。但是Excel的工作表又是另一個二維矩陣,這就意味著,從數據庫讀取出的對象數據,又需要循環寫入另一個表格中,這使得代碼難以維護。

為了解決數據不易維護的問題,可以給工作表,單元格或者表格設置對象及單元格的綁定關系,這樣在保存時便可以根據數據源的綁定關系,自動填充數據。

具體實現方法

現有數據類如下:

public static class SalesRecord {
   public int sales;
   public String productType;
   public String product;
   public String salesman;
   public String area;
 }

 public static class SalesData {
   public ArrayList records;
 }

樣本數據如下:

private SalesData getDataSource() {
   // 創建數據源
   SalesData datasource = new SalesData();
   datasource.records = new ArrayList();

   // 添加數據
   SalesRecord record1 = new SalesRecord();
   record1.area = "NorthChina";
   record1.salesman = "Hellen";
   record1.product = "Apple";
   record1.productType = "Fruit";
   record1.sales = 120;
   datasource.records.add(record1);

   SalesRecord record2 = new SalesRecord();
   record2.area = "NorthChina";
   record2.salesman = "Hellen";
   record2.product = "Banana";
   record2.productType = "Fruit";
   record2.sales = 143;
   datasource.records.add(record2);

   SalesRecord record3 = new SalesRecord();
   record3.area = "NorthChina";
   record3.salesman = "Hellen";
   record3.product = "Kiwi";
   record3.productType = "Fruit";
   record3.sales = 322;
   datasource.records.add(record3);
   return datasource;
 }

1.數據源綁定至工作表

下面是給工作表設置數據源綁定的代碼,其中setAutoGenerateColumns設置為false,當setAutoGenerateColumns為true 時,工作表會根據數據源自動生成列。

public void SheetBinding() {
   // 創建一個新的workbook
   Workbook workbook = new Workbook();
   // 獲取默認sheet
   IWorksheet worksheet = workbook.getWorksheets().get(0);

   SalesData datasource = getDataSource();

   // 自動生成列設置為false
   worksheet.setAutoGenerateColumns(false);

   // 給工作表中的每一列綁定數據源
   worksheet.getRange("A:A").getEntireColumn().setBindingPath("area");
   worksheet.getRange("B:B").getEntireColumn().setBindingPath("salesman");
   worksheet.getRange("C:C").getEntireColumn().setBindingPath("product");
   worksheet.getRange("D:D").getEntireColumn().setBindingPath("productType");
   worksheet.getRange("E:E").getEntireColumn().setBindingPath("sales");

   // 設置數據源
   worksheet.setDataSource(datasource.records);

   // 保存為Excel文件
   workbook.save("output/SheetBinding.xlsx");
 }

實現效果如下:
高效數據傳輸:Java通過綁定快速將數據導出至Excel

2.數據源綁定至單元格

// 創建workbook
 Workbook workbook = new Workbook();
 // 獲取默認的sheet
 IWorksheet worksheet = workbook.getActiveSheet();

 // 添加數據
 SalesRecord record = new SalesRecord();
 record.area = "北方";
 record.salesman = "李強";
 record.product = "蘋果";
 record.productType = "水果";
 record.sales = 120;

 // 給單元格設置綁定
 worksheet.getRange("A1").setBindingPath("area");
 worksheet.getRange("B2").setBindingPath("salesman");
 worksheet.getRange("C2").setBindingPath("product");
 worksheet.getRange("D3").setBindingPath("productType");

 // 設置數據源
 worksheet.setDataSource(record);

 // 保存為Excel
 workbook.save("output/CellBinding.xlsx");

實現效果如下:
高效數據傳輸:Java通過綁定快速將數據導出至Excel

3.數據源綁定至表格

下面的代碼使用了setExpandBoundRows ,ITable.setExpandBoundRows方法用來處理一個綁定的表格對數據源的更改該如何響應。當屬性設置為true時,該綁定表格會使用整行操作自動調整行數以適應數據源更改。

// 創建workbook
 Workbook workbook = new Workbook();
 // 獲取默認的sheet
 IWorksheet worksheet = workbook.getActiveSheet();

 SalesData datasource = getDataSource();
 // 添加一個表格
 ITable table = worksheet.getTables().add(worksheet.getRange("B2:F5"), true);

 // 設置表格,不自動生成列
 table.setAutoGenerateColumns(false);

 // 給表格設置綁定path
 table.setBindingPath("records");

 // 設置setExpandBoundRows為true,
 table.setExpandBoundRows(true);

 // 設置表格列的數據字段
 table.getColumns().get(0).setDataField("area");
 table.getColumns().get(1).setDataField("salesman");
 table.getColumns().get(2).setDataField("product");
 table.getColumns().get(3).setDataField("productType");
 table.getColumns().get(4).setDataField("sales");

 // 設置數據源
 worksheet.setDataSource(datasource);

 // 保存為excel
 workbook.save("output/TableBinding.xlsx");

實現效果如下:
高效數據傳輸:Java通過綁定快速將數據導出至Excel

總結

通過給工作表、單元格或表格設置數據源綁定關系,可以實現將數據庫中的數據導出到Excel的功能。這種方法使用對象和屬性的綁定關系,將內存中的數據源與Excel中的工作表、單元格或表格進行連接。這樣,在保存數據時,只需要根據數據源的綁定關系自動填充數據,而無需手動循環寫入。這種實現方式簡化了代碼,提高了代碼的可維護性和可擴展性。同時,通過設置自動生成列、設置綁定路徑以及處理數據源變化等操作,還可以進一步增強導出功能的靈活性和適應性。總的來說,這種數據源綁定的方法為數據導出提供了一種優雅而高效的解決方案。

擴展鏈接:

從表單驅動到模型驅動,解讀低代碼開發平臺的發展趨勢

低代碼開發平臺是什么?

基于分支的版本管理,幫助低代碼從項目交付走向定制化產品開發

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费久久精品 | 万圣街在线观看免费完整版 | 欧美亚洲国产成人 | 538任你躁在线精品视频网站 | 国产亚洲精品美女久久久 | 国产成人高潮免费观看精品 | 羞羞网站在线看 | 久久免费视频在线 | 一区二区久久精品66国产精品 | 日本一道aⅴ不卡免费播放 日日草夜夜操 | 色偷偷一区 | 毛片在线视频在线播放 | 欧美黄一区 | 看国产毛片 | 中国老女人一级毛片视频 | 成人男女啪啪免费观看网站四虎 | 超级av在线 | 国产亚洲黑人性受xxxx精品 | www.91sese| 欧美激情第一区 | 免费黄色大片网站 | 亚洲一区免费观看 | 高清国产午夜精品久久久久久 | 午夜精品老牛av一区二区三区 | 日本黄色免费片 | 精品黑人一区二区三区国语馆 | 精品亚洲一 | av播播 | 黄网免费看 | 黄色免费视频网站 | 天天干天天碰 | 在线天堂中文在线资源网 | 国产精品成年片在线观看, 激情小说另类 | 欧美一级淫片007 | 天天操很很操 | 久久久精品综合 | 久久精品网 | 成人av一区二区免费播放 | 欧洲成人一区二区 | 久久天 | 久久精品99久久久久久2456 |