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

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

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

擴展鏈接:

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

低代碼開發平臺是什么?

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黑人破中国女人处 | 日韩福利一区 | 美女黄金大片视频免费看 | 狠狠色伊人亚洲综合网站色 | 国内精品麻豆 | 欧美另类videos另类粗暴 | 啊啊啊好大视频 | 日韩毛片免费 | 久久精品国产清白在天天线 | 国产99视频精品免视看7 | 色噜噜国产精品视频一区二区 | 成年性生交大片免费看 | 男人的j放进女人的p全黄 | 被老外操 | 香港三级系列在线播放 | 日韩欧美中文字幕出 | 日韩xx00| 肥胖女性大bbbbbb视频女厕 | 西野翔全部作品在线观看 | 国产精品久久久久久五月尺 | 国产成人亚洲影视在线 | 久久久精品成人免费看 | 美女免费观看一区二区三区 | 国产午夜成人无码免费看 | 久久免费看少妇级毛片蜜臀 | 男人操男人 | 精品国产免费 | 美女被狂揉下部羞羞动漫 | 婷婷日韩 | 特级毛片全部免费播放器 | chinesexxxxhd人妖 chinesespanking调教 | 黄瓜视频免费 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 好硬好大好浪夹得好紧h | 十大免费b2b网站 | 太大了轻点阿受不了小说h 四色6677最新永久网站 | 99国内精品久久久久久久黑人 | 欧美性色欧美a在线播放 | 亚洲国产精品嫩草影院久久 | 国产高清在线播放免费观看 | 双性np肉文 |