一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

擴展鏈接:

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

低代碼開發平臺是什么?

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 三上悠亚国产精品一区 | 免费亚洲成人 | 精品免费久久久久久影院 | 男同志与动人物zozotv | 2021国产麻豆剧传媒剧情动漫 | 337p大尺度啪啪人体午夜2020 | 无限韩国视频免费播放 | 精品麻豆国产 | 精品国产乱码久久久久久人妻 | 美女把小内内脱个精光打屁屁 | 免费看伦理片 | 国产精品久久久久久久久免费观看 | 8x8x拔插 | 极品虎白女在线观看一线天 | 欧美美女一级片 | 恩爱夫妇交换小说 | 日韩毛片高清在线看 | 日韩在线一区二区三区免费视频 | 免费观看视频高清在线 | 91精品国产综合久久福利 | 久久精品动漫99精品动漫 | 翁公与小莹在客厅激情 | 久久99精品久久久久久园产越南 | 日本一本草久p | 午夜影院和视费x看 | 国产免费一区二区 | 久久视频在线视频观看精品15 | 青草欧美 | 帅老头恋帅老头同性tv | 精品一久久香蕉国产线看播放 | 男人捅女人漫画 | 国产亚洲精品美女 | 丝瓜视频在线观看污 | 欧美久草在线 | 色老板在线观看 | 校花小雪灌满了男人们的浓浆 | 9热在线精品视频观看 | 日韩欧美精品一区二区 | 亚洲精品视频导航 | 国产福利不卡一区二区三区 | 久久精品热99看 |