如何通過Java實現生成excel並通過流的方式返回,提供下載!!
jxl.jar是通過java操作excel表格的工具類庫,還有一種是poi.這裡介紹jxl類來操作.
import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.format.VerticalAlignment; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import net.sf.json.JSONObject; private void createDeviceOrderListExcel(Result<InventoryDeviceVO> result, WritableWorkbook workbook) throws Exception { try{ WritableSheet wsheet = workbook.createSheet("盤點列表", 0); wsheet.getSettings().setVerticalFreeze(1); wsheet.getSettings().setVerticalFreeze(2); wsheet.getSettings().setVerticalFreeze(3); // 定義title單元格樣式:字型 下劃線 斜體 粗體 顏色 WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); // 單元格定義 WritableCellFormat wcf_title = new WritableCellFormat(wf_title); // 設定單元格的背景顏色 wcf_title.setBackground(Colour.GRAY_25); // 設定對齊方式 wcf_title.setAlignment(Alignment.CENTRE); wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE); //設定邊框 wcf_title.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.BLACK); // 定義body單元格樣式:定義格式 字型 下劃線 斜體 粗體 顏色 WritableFont wf_table = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK); WritableCellFormat wcf_table = new WritableCellFormat(wf_table); wcf_table.setBackground(Colour.WHITE); wcf_table.setAlignment(Alignment.CENTRE); wcf_table.setVerticalAlignment(VerticalAlignment.CENTRE); wcf_table.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.BLACK); // title名稱 String[] str = {"配置項編號","裝置名稱","規格型號","出庫日期","所在地點","資產財務編號","清查確認所在地","使用部門","使用人","管理責任人", "單價","盤點結果","賬實相符","在用","閒置","報廢待處理","盤虧"}; // 在Label物件的構造子中指名單元格位置是第幾列第幾行 for (int i = 0; i < 14; i++) { // 第一步:設定顯示列寬度 switch (i) { case 0: case 2: case 8: wsheet.setColumnView(i, 16); break; case 1: case 3: case 6: case 12: wsheet.setColumnView(i, 12); break; case 4: case 5: wsheet.setColumnView(i, 14); break; case 7: case 9: case 10: wsheet.setColumnView(i, 8); break; case 11: case 13: wsheet.setColumnView(i, 6); break; default: break; } // 第二步:建立新增到wsheet的cell Label label = null; if (i == 4) { // 所在地點 label = new Label(i, 0, str[i], wcf_title); // 資產財務編號 Label assetfinNumLab = new Label(i, 1, str[i+1], wcf_title); wsheet.addCell(assetfinNumLab); } else if (i == 5) { // 清楚確認所在地 label = new Label(i, 1, str[i+1], wcf_title); } else if (i == 10) { // 盤點結果 label = new Label(i, 0, str[i+1], wcf_title); // 賬實相符 Label realLab = new Label(i, 1, str[i+2], wcf_title); wsheet.addCell(realLab); // 在用 Label usingLab = new Label(i, 2, str[i+3], wcf_title); wsheet.addCell(usingLab); } else if (i == 11) { // 閒置 label = new Label(i, 2, str[i+3], wcf_title); } else if (i == 12) { // 報廢待處理 label = new Label(i, 2, str[i+3], wcf_title); } else if (i == 13) { // 盤虧 label = new Label(i, 1, str[i+3], wcf_title); } else { if ( i>5 && i<10) { label = new Label(i, 0, str[i+1], wcf_title); } else { label = new Label(i, 0, str[i], wcf_title); } } wsheet.addCell(label); // 第三步:合併單元格 if (i == 4 && i < 11) { // 所在地點 wsheet.mergeCells(i, 0, i+1, 0); // 資產財務編號 wsheet.mergeCells(i, 1, i, 2); } else if (i == 5 && i < 11) { // 清查確認所在地點 wsheet.mergeCells(i, 1, i, 2); } else if (i == 10 && i < 11) { // 盤點結果 wsheet.mergeCells(i, 0, i+3, 0); // 賬實相符 wsheet.mergeCells(i, 1, i+2, 1); } else if (i < 11){ wsheet.mergeCells(i, 0, i, 2); } } // 合併盤虧 wsheet.mergeCells(13, 1, 13, 2); // 輸出值到excel int j = 3; for (InventoryDeviceVO order : result) { int index = 0; // 配置項編號 wsheet.addCell(new Label(index++, j, order.getAssetBarcode()==null ?"":order.getAssetBarcode(), wcf_table)); // 裝置名稱 wsheet.addCell(new Label(index++, j, order.getDeviceName()==null ?"":order.getDeviceName(), wcf_table)); // 規格型號 wsheet.addCell(new Label(index++, j, order.getAssetModel()==null ?"":order.getAssetModel(), wcf_table)); // 出庫日期 if (!isNull(order.getCiOutStroageDate())) { wsheet.addCell(new Label(index++, j, dateToStr(order.getCiOutStroageDate(),"yyyy-MM-dd"), wcf_table)); } else { wsheet.addCell(new Label(index++, j, "", wcf_table)); } // 資產財務編號 wsheet.addCell(new Label(index++, j, order.getCiFinanceCode()==null ?"":order.getCiFinanceCode(), wcf_table)); // 清查確認所在地點 wsheet.addCell(new Label(index++, j, order.getConfirmArea()==null ?"":order.getConfirmArea(), wcf_table)); // 所屬部門 wsheet.addCell(new Label(index++, j, order.getCiUseUserDepartment()==null ?"":order.getCiUseUserDepartment(), wcf_table)); // 使用人 wsheet.addCell(new Label(index++, j, order.getCiUseUser()==null ?"":order.getCiUseUser(), wcf_table)); // 管理責任人 wsheet.addCell(new Label(index++, j, order.getManagerRes()==null ?"":order.getManagerRes(), wcf_table)); // 單價 wsheet.addCell(new Label(index++, j, order.getCiPrice()==null ?"":order.getCiPrice(), wcf_table)); // 在用(由客戶填寫,這裡設定為空) wsheet.addCell(new Label(index++, j, "", wcf_table)); // 閒置(由客戶填寫,這裡設定為空) wsheet.addCell(new Label(index++, j, "", wcf_table)); // 報廢待處理(由客戶填寫,這裡設定為空) wsheet.addCell(new Label(index++, j, "", wcf_table)); // 盤虧(由客戶填寫,這裡設定為空) wsheet.addCell(new Label(index++, j, "", wcf_table)); j++; } }catch(Exception e){ e.printStackTrace(); BeanLog.getLogger().fatal("構造book", e); throw e; } }
這裡面有 幾個方法講解一下
將結果以流的方式返回
outputStream = WebUtils.getOutputStream(response, fileName + ".xls", "UTF-8");
// 匯出查詢結果
WritableWorkbook workbook = Workbook.createWorkbook(outputStream);
建立一個sheet頁
WritableSheet wsheet = workbook.createSheet("盤點列表", 0);
對應的設定是
// 定義title單元格樣式:字型 下劃線 斜體 粗體 顏色
WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
// 單元格定義
WritableCellFormat wcf_title = new WritableCellFormat(wf_title);
// 設定單元格的背景顏色
wcf_title.setBackground(Colour.GRAY_25);
// 設定對齊方式
wcf_title.setAlignment(Alignment.CENTRE);
wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE);
//設定邊框
wcf_title.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.BLACK);
// 在Label物件的構造子中指名單元格位置是第幾列第幾行
Label label1 = new Label(0, 0, "匯出盤點管理", wcf_title);
合併單元格 wsheet.mergeCells(0, 0, 7, 0);
第一個引數,左邊的列數,第二個引數,左邊的行數,第三個引數,右邊的列數,第四個引數,右邊的行數
wsheet.addCell(label1);將該單元格新增到sheet頁
wsheet.setColumnView(i, 16);設定單元格的寬度;
wsheet.setRowView(arg0, arg1);設定單元格的長度
將一個list迴圈的資料,新增到sheet頁
for (InventoryDeviceTestVO order : result) {
int index = 0;
// 配置項編號
wsheet.addCell(new Label(index++, j, order.getAssetBarcode()==null ?"":order.getAssetBarcode(), wcf_table));
// 裝置名稱
wsheet.addCell(new Label(index++, j, order.getDeviceName()==null ?"":order.getDeviceName(), wcf_table));
// 規格型號
wsheet.addCell(new Label(index++, j, order.getAssetModel()==null ?"":order.getAssetModel(), wcf_table));
// 出庫日期
if (!isNull(order.getCiOutStroageDate())) {
wsheet.addCell(new Label(index++, j, dateToStr(order.getCiOutStroageDate(),"yyyy-MM-dd"), wcf_table));
} else {
wsheet.addCell(new Label(index++, j, "", wcf_table));
}
// 資產財務編號
wsheet.addCell(new Label(index++, j, order.getCiFinanceCode()==null ?"":order.getCiFinanceCode(), wcf_table));
// 所屬部門
wsheet.addCell(new Label(index++, j, order.getCiUseUserDepartment()==null ?"":order.getCiUseUserDepartment(), wcf_table));
// 使用人
wsheet.addCell(new Label(index++, j, order.getCiUseUser()==null ?"":order.getCiUseUser(), wcf_table));
// 單價
wsheet.addCell(new Label(index++, j, order.getCiPrice()==null ?"":order.getCiPrice(), wcf_table));
j++;
}
}
相關推薦
如何通過Java實現生成excel並通過流的方式返回,提供下載!!
jxl.jar是通過java操作excel表格的工具類庫,還有一種是poi.這裡介紹jxl類來操作. import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import jxl
Asp.net MVC簡單實現生成Excel並下載
user query 輔助類 his rpath play 是我 none mod 由於項目上的需求,需要導出指定條件的Excel文件。經過一翻折騰終於實現了。 現在把代碼貼出來分享 (直接把我們項目裏面的一部份輔助類的代碼分享一下) 我們項目使用的是Asp.Net M
java 實現生成excel表頭,A-Z;AA-ZZ;AAA-ZZZ支援無限
public String getKey(int index){ String colCode = ""; char key='A'; int loop = index / 26;
Java實現讀取Excel並按條件輸出TXT
據我所知,java中能操作Excel檔案的jar包有兩個 Apache公司的一個API 微軟的java Excel包 在這裡我使用的是第二個,微軟公司的java Excel包 這個包出現了一個為題,並不能順利的輸出規定的xls 會報錯 在測試多次無
Web_telnet 通過JAVA實現網頁上面的命令列遠端工具 以及對於流的理解
前言 這幾天研究了一下如何在web頁面上通過telnet 連線一個遠端的機器,通過命令列進行控制,讓然,B/S架構的專案,如果直接通過 瀏覽器是無法和遠端機器進行通訊的,我們就得藉助後端來幫助實現這樣的一個功能需求,具體的實現邏輯是: 使用者———&mdash
通過Java實現鬥地主
inf AS 9.png import layer TE 編號 ber package 功能:洗牌,發牌,對玩家手中的牌排序,看牌 package demo06; import java.util.ArrayList; import java.util.
springmvc 使用poi解析excel並通過hibernate連續插入多條數據 實際數據庫只能保存最後一條
mvc nbsp block png 技術 測試 info 保存 csdn 有一個原始數據的excel表 用poi解析之後通過hibernate插數據庫 結果 後來發現,有人說 果斷嘗試 問題解決 但是這好像並不是真正解決問題,只是解決了一個現象 因為有
通過Java實現HMAC,將字串雜湊成為全部由字母組成的密文串
以下Java程式碼可以將任何字串通過HMAC雜湊,並輸出成由大寫的A到P組成的密文字串。 public class HMAC { private final static String KEY_MAC = "HMACMD5"; /** * 全域性陣列 *
JAVA -- 生成Excel 並上傳到 FTP 不生成本地檔案
直接上程式碼 POM.XML 這裡只是主要的jar <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>
Excel--通過poi普通生成excel檔案
public static void writeExcel(List<List<String>> dataList) { String finalXlsxPath = System.getProperty("user.dir") + "Bai
(二)使用apache的commons-httpclient-3.1.jar之通過Java實現發起HTTP請求【使用代理】
本檔案介紹在需要通過代理才能訪問外網的情況下如何以純Java實現發起HTTP的請求。此部分內容與上一篇部落格內容大同小異,只有兩處稍有不同。 1.準備需要的Jar包 需要的jar包與上一篇介紹的相同,包括:commons-httpclient-3.
Java實現開啟Excel檔案,執行VBA指令碼並監測檔案狀態
/** * @author DevinLiu * 一鍵釋出報告 * 2018年9月19日下午2:44:19 */ public class GenerateReport { public String report(){
JAVA實現建立Excel表並匯出
1.首先下載poi-3.6-20091214.jar,下載地址如下: 或者使用Maven倉庫管理,在pom檔案新增座標 <dependency> <groupId>org.apache.poi</group
通過Java實現Linux系統下grep指令的功能
現有如下方法可實現在Windows系統下通過Java程式碼實現與第一種使用方法相同的功能:import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOEx
通過java實現解壓zip,rar的程式碼
package com.zuidaima.main; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.i
spring自動裝配和通過java實現裝配
ati 三方庫 autowired 模式 限定 程序 str primary java實現 1.組建掃描 在類上添加註解@Component註解可以實現組建掃描 @Component public class A{ ... } 2.自動裝配 通過在屬性上或者方
通過patch實現生成使用補丁
一、原理 diff比較兩個檔案或檔案集合的差異,並記錄下來,生成一個diff檔案,這也是我們常說的patch檔案,即補丁檔案。 patch能將diff檔案運用於 原來的兩個集合之一,從而得到
Java根據模板生成excel並下載
需要用到的jar包有freemarker-2.3.18.jar,freemarker-util-0.0.1-SNAPSHOT.jar,jxl-2.6.10.jar,jxl-report-1.0.jar,這些網上都有,可以去找 來吧,直接上乾貨。excel模板如圖: 很容
vue項目如何通過前端實現自動識別並配置服務器環境地址
syn style default 不同的 檢查 開放 定義 獲取 api 前言: 一般來說,一個web項目的生產環境和測試環境的服務器地址一旦確定下來,很少會頻繁變動的。那麽就可以單獨寫一個腳本文件,通過當前訪問的域名來判斷當前的訪問環境,然後再通過一定的規則獲取對應的
Java動態生成SQL語句通過JDBC達成資料庫操作
在java中使用jdbc進行資料庫操作的時候 我們或許需要從多個表中進行查詢和插入操作 特別是如果多個表還有相互的依賴關係的話,插入操作就顯得非常難受 因為或許每一個動作,都需要重寫一個完全不同的sql語句 這樣的話程式碼量確實十分的大 而且程式碼會顯