日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux百万行数据加分页符,百万级数据量报表全量导出

發布時間:2023/12/31 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux百万行数据加分页符,百万级数据量报表全量导出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java中使用poi導出Excel詳解java當初把核心處理設成Unicode,帶來的好處是代碼適應了多語言環境。然而由于老外的英語只有26個字母,有些情況下,一些程序員用8 位的byte處理,一不小心就去掉了CJK的高位。或者是由于習慣在程序中采用硬編碼,還有多種原因,使得許多java應用在CJK的...顯示全部

java中使用poi導出Excel詳解

java當初把核心處理設成Unicode,帶來的好處是代碼適應了多語言環境。然而由于老外的英語只有26個字母,有些情況下,一些程序員用8 位的byte處理,一不小心就去掉了CJK的高位。或者是由于習慣在程序中采用硬編碼,還有多種原因,使得許多java應用在CJK的處理上很煩惱。還好 在POI HSSF中考慮到這個問題,可以設置encoding為雙字節。

POI可以到www.apache.org下載到。編譯好的jar主要有這樣4個:poi包,poi Browser包,poi hdf包,poi hssf例程包。實際運行時,需要有poi包就可以了。如果你僅僅是為了熟悉POI hssf的使用,可以直接看POI的samples包中的源代碼,并且運行它。hssf的各種對象都有例程的介紹。hssf提供的例程在 org.apache.poi.hssf.usermodel.examples包中,共有14個,生成的目標xls都是workbook.xls。如果 你想看更多的例程,可以參考hssf的Junit test cases,在poi的包的源代碼中。hssf都有測試代碼。

這里只對部分例程的實現做介紹。

HSSF提供給用戶使用的對象在org.apache.poi.hssf.usermodel包中,主要部分包括Excell對象,樣式和格式,還有輔助操作。有以下幾種對象:

HSSFWorkbook excell的文檔對象

HSSFSheet excell的表單

HSSFRow excell的行

HSSFCell excell的格子單元

HSSFFont excell字體

HSSFName 名稱

HSSFDataFormat 日期格式

仔細看org.apache.poi.hssf包的結構,不難發現HSSF的內部實現遵循的是MVC模型。

HSSFWorkbook即是一個Excell對象。許多對象中也建立了 Workbook的引用。還需要注意的是在HSSFWorkbook和HSSFSheet中建立了log機制POILogger,而且POILogger 也是使用apache Log4J實現的。

先看poi的examples包中提供的最簡單的例子,建立一個空xls文件。

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.FileOutputStream;

import java.io.IOException;

publicclass NewWorkbook

{

publicstaticvoid main(String[] args)

throws IOException

{

HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook對象

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);//把Workbook對象輸出到文件workbook.xls中

fileOut.close();

}

}

通過這個例子,我們建立的是一個空白的xls文件(不是空文件)。在此基礎上,我們可以進一步看其它的例子。

import org.apache.poi.hssf.usermodel.*;

import java.io.FileOutputStream;

import java.io.IOException;

publicclass CreateCells

{

publicstaticvoid main(String[] args)

throws IOException

{

HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook對象

HSSFSheet sheet = wb.createSheet("new sheet");//建立新的sheet對象

// Create a row and put some cells in it. Rows are 0 based.

HSSFRow row = sheet.createRow((short)0);//建立新行

// Create a cell and put a value in it.

HSSFCell cell = row.createCell((short)0);//建立新cell

cell.setCellValue(1);//設置cell的整數類型的值

// Or do it on one line.

row.createCell((short)1).setCellValue(1.2);//設置cell浮點類型的值

row.createCell((short)2).setCellValue("test");//設置cell字符類型的值

row.createCell((short)3).setCellValue(true);//設置cell布爾類型的值

HSSFCellStyle cellStyle = wb.createCellStyle();//建立新的cell樣式

cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));//設置cell樣式為定制的日期格式

HSSFCell dCell =row.createCell((short)4);

dCell.setCellValue(new Date());//設置cell為日期類型的值

dCell.setCellStyle(cellStyle); //設置該cell日期的顯示格式

HSSFCell csCell =row.createCell((short)5);

csCell.setEncoding(HSSFCell.ENCODING_UTF_16);//設置cell編碼解決中文高位字節截斷

csCell.setCellValue("中文測試_Chinese Words Test");//設置中西文結合字符串

row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);//建立錯誤cell

// Write the output to a file

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);

fileOut.close();

}

}

我稍微修改了原來的examples包中的CreateCells類寫了上面的功能測試類。通過這個例子,我們可以清楚的看到xls文件從大到小包 括了 HSSFWorkbook HSSFSheet HSSFRow HSSFCell這樣幾個對象。我們可以在cell中設置各種類型的值。尤其要注意的是如果你想正確的顯示非歐美的字符時,尤其象中日韓這樣的語言,必須 設置編碼為16位的即是HSSFCell.ENCODING_UTF_16,才能保證字符的高8位不被截斷而引起編碼失真形成亂碼。

其他測試可以通過參考examples包中的測試例子掌握poi的詳細用法,包括字體的設置,cell大小和低紋的設置等。需要注意的是POI是一 個仍然在完善中的公開代碼的項目,所以有些功能正在不斷的擴充。如HSSFSheet的getFooter() getHeader()和 setFooter(HSSFFooter hsf) setHeader(HSSFHeader hsh)是在POI1.7中才有的,而POI1.5中就沒有。運行測試熟悉代碼或者使用它做項目時請注意POI的版本。

另外需要注意的是HSSF也有它的對xls基于事件的解析。可以參考例程中的EventExample.java。它通過實現 HSSFListener完成從普通流認知Xls中包含的內容,在apache Cocoon中的 org.apache.cocoon.serialization.HSSFSerializer中用到了這個解析。因為Cocoon2 是基于事件的,所以POI為了提供快速的解析也提供了相應的事件。當然我們自己也可以實現這個事件接口。

因為POI還不是一個足夠成熟的項目,所以有必要做進一步的開發和測試。但是它已經為我們用純java操作ole2對象提供了可能,而且克服了ole對象調用的缺陷,提供了服務器端的Excel解決方案。

利用Java 創建和讀取Excel文檔

為了保證示例程序的運行,必須安裝Java 2 sdk1.4.0 和Jakarta POI,Jakarta POI的Web站點是: http://jakarta.apache.org/poi/

示例1將演示如何利用Jakarta POI API 創建Excel 文檔。

示例1程序如下:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFCell;

import java.io.FileOutputStream;

publicclass CreateXL {

/** Excel 文件要存放的位置,假定在D盤JTest目錄下*/

publicstatic String outputFile="D:/JTest/ gongye.xls";

publicstaticvoid main(String argv[])

{

try

{

// 創建新的Excel 工作簿

HSSFWorkbook workbook = new HSSFWorkbook();

// 在Excel工作簿中建一工作表,其名為缺省值

// 如要新建一名為"效益指標"的工作表,其語句為:

// HSSFSheet sheet = workbook.createSheet("效益指標");

HSSFSheet sheet = workbook.createSheet();

// 在索引0的位置創建行(最頂端的行)

HSSFRow row = sheet.createRow((short)0);

//在索引0的位置創建單元格(左上端)

HSSFCell cell = row.createCell((short) 0);

// 定義單元格為字符串類型

cell.setCellType(HSSFCell.CELL_TYPE_STRING);

// 在單元格中輸入一些內容

cell.setCellValue("增加值");

// 新建一輸出文件流

FileOutputStream fOut = new FileOutputStream(outputFile);

// 把相應的Excel 工作簿存盤

workbook.write(fOut);

fOut.flush();

// 操作結束,關閉文件

fOut.close();

System.out.println("文件生成...");

}catch(Exception e) {

System.out.println("已運行 xlCreate() : " + e );

}

}

}

讀取Excel文檔中的數據

示例2將演示如何讀取Excel文檔中的數據。假定在D盤JTest目錄下有一個文件名為gongye.xls的Excel文件。

示例2程序如下:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFCell;

import java.io.FileInputStream;

publicclass ReadXL {

/** Excel文件的存放位置。注意是正斜線*/

publicstatic String fileToBeRead="D:/JTest/ gongye.xls";

publicstaticvoid main(String argv[]){

try{

// 創建對Excel工作簿文件的引用

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));

// 創建對工作表的引用。

// 本例是按名引用(讓我們假定那張表有著缺省名"Sheet1")

HSSFSheet sheet = workbook.getSheet("Sheet1");

// 也可用getSheetAt(int index)按索引引用,

// 在Excel文檔中,第一張工作表的缺省索引是0,

// 其語句為:HSSFSheet sheet = workbook.getSheetAt(0);

// 讀取左上端單元

HSSFRow row = sheet.getRow(0);

HSSFCell cell = row.getCell((short)0);

// 輸出單元內容,cell.getStringCellValue()就是取所在單元的值

System.out.println("左上端單元是: " + cell.getStringCellValue());

}catch(Exception e) {

System.out.println("已運行xlRead() : " + e );

}

}

}

設置單元格格式

在這里,我們將只介紹一些和格式設置有關的語句,我們假定workbook就是對一個工作簿的引用。在Java

中,第一步要做的就是創建和設置字體和單元格的格式,然后再應用這些格式:

1、創建字體,設置其為紅色、粗體:

HSSFFont font = workbook.createFont();

font.setColor(HSSFFont.COLOR_RED);

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

2、創建格式

HSSFCellStyle cellStyle= workbook.createCellStyle();

cellStyle.setFont(font);

3、應用格式

HSSFCell cell = row.createCell((short) 0);

cell.setCellStyle(cellStyle);

cell.setCellType(HSSFCell.CELL_TYPE_STRING);

cell.setCellValue("標題 ");

總之,如本篇文章所演示的一樣,Java程序員不必擔心Excel工作表中的數據了,利用Jakarta POI API,

我們就可以輕易的在程序中存取Excel文檔。

首先說說現在我所知道的Java編輯Excel文件的兩大開源工具:

jakarta POI和JavaExcelAPI(簡稱JXL),這兩套工具我都試用了一這段時間,感覺各有優劣吧。POI在某些細節有些小Bug并且不支持寫入圖片,其他方面都挺不錯的;

JXL 就慘了,除了支持寫入圖片外,我暫時看不到它比POI好的地方,我碰到的主要的問題就是對公式支持不是很好,很多帶有公式的Excel文件用 JXL打開后,公式就丟失了(比如now(),today()),在網上看到其他大蝦評論說JXL寫入公式也有問題,另外,JXL操作Excel文件的效 率比 POI低一點。經過比較后,我選擇了POI開發我的項目。

現在我要做的東西基本完成啦,我把這段時間使用POI的一些心得總結出來,希望能對和我遇到相同問題的朋友有所幫助,至于POI基本的使用方法,自己去看文檔吧。

1、設置分頁符的bug

POI里的HSSFSheet類提供了setRowBreak方法可以設置Sheet的分頁符。

Bug:如果你要設置分頁符的Sheet是本來就有的,并且你沒有在里面插入過分頁符,那么調用setRowBreak時POI會拋出空指針的異常。

解決方法:在Excel里給這個sheet插入一個分頁符,用POI打開后再把它刪掉,然后你就可以隨意插入分頁符了。

如果sheet是由POI生成的則沒有這個問題。我跟蹤了setRowBreak的源代碼,發現是Sheet.Java下的 PageBreakRecord rowBreaks這個變量在搞鬼,如果Sheet里原來沒有分頁符,開發這個模塊的那位兄臺忘了為這個對象new實例,所以只能我們先手工給Excel 插入一個分頁符來觸發POI為rowBreaks創建實例。

2、如何拷貝行

我在gmane.org的POI用戶論壇翻遍了每個相關的帖子,找遍了api,也沒看到一個拷貝行的方法,沒辦法,只能自己寫:

//注:this.fWorkbook是一個HSSHWorkbook,請自行在外部new

publicvoid copyRows

(String pSourceSheetName,

String pTargetSheetName,

int pStartRow, int pEndRow,

int pPosition)

{

HSSFRow sourceRow = null;

HSSFRow targetRow = null;

HSSFCell sourceCell = null;

HSSFCell targetCell = null;

HSSFSheet sourceSheet = null;

HSSFSheet targetSheet = null;

Region region = null;

int cType;

int i;

short j;

int targetRowFrom;

int targetRowTo;

if ((pStartRow == -1) || (pEndRow == -1))

{

return;

}

sourceSheet = this.fWorkbook.getSheet(pSourceSheetName);

targetSheet = this.fWorkbook.getSheet(pTargetSheetName);

//拷貝合并的單元格

for (i = 0; i < sourceSheet.getNumMergedRegions(); i++)

{

region = sourceSheet.getMergedRegionAt(i);

if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() <= pEndRow))

{

targetRowFrom = region.getRowFrom() - pStartRow + pPosition;

targetRowTo = region.getRowTo() - pStartRow + pPosition;

region.setRowFrom(targetRowFrom);

region.setRowTo(targetRowTo);

targetSheet.addMergedRegion(region);

}

}

//設置列寬

for (i = pStartRow; i <= pEndRow; i++)

{

sourceRow = sourceSheet.getRow(i);

if (sourceRow != null)

{

for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++)

{

targetSheet.setColumnWidth(j, sourceSheet.getColumnWidth(j));

}

break;

}

}

//拷貝行并填充數據

for (;i <= pEndRow; i++)

{

sourceRow = sourceSheet.getRow(i);

if (sourceRow == null)

{

continue;

}

targetRow = targetSheet.createRow(i - pStartRow + pPosition);

targetRow.setHeight(sourceRow.getHeight());

for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++)

{

sourceCell = sourceRow.getCell(j);

if (sourceCell == null)

{

continue;

}

targetCell = targetRow.createCell(j);

targetCell.setEncoding(sourceCell.getEncoding());

targetCell.setCellStyle(sourceCell.getCellStyle());

cType = sourceCell.getCellType();

targetCell.setCellType(cType);

switch (cType)

{

case HSSFCell.CELL_TYPE_BOOLEAN:

targetCell.setCellValue(sourceCell.getBooleanCellValue());

break;

case HSSFCell.CELL_TYPE_ERROR:

targetCell.setCellErrorValue(sourceCell.getErrorCellValue());

break;

case HSSFCell.CELL_TYPE_FORMULA:

//parseFormula這個函數的用途在后面說明

targetCell.setCellFormula(parseFormula(sourceCell.getCellFormula()));

break;

case HSSFCell.CELL_TYPE_NUMERIC:

targetCell.setCellValue(sourceCell.getNumericCellValue());

break;

case HSSFCell.CELL_TYPE_STRING:

targetCell.setCellValue(sourceCell.getStringCellValue());

break;

}

}

}

}

這個函數有兩個問題暫時無法解決:

a、只能在同一個Workbook里面使用,跨Workbook總是拷不過去,不知道為什么?

b、由于在拷貝行時也把行高也拷過去了,如果往這些單元格里寫入的數據長度超過單元格長度,那么他們不會自動調整行高!

3、公式的問題

POI 對Excel公式的支持是相當好的,但是我發現一個問題,如果公式里面的函數不帶參數,比如now()或today(),那么你通過 getCellFormula()取出來的值就是now(ATTR(semiVolatile))和 today(ATTR (semiVolatile)),這樣的值寫入Excel是會出錯的,這也是我上面copyRow的函數在寫入公式前要調用 parseFormula的原 因,parseFormula這個函數的功能很簡單,就是把ATTR(semiVolatile)刪掉,我把它的代碼貼出來:

private String parseFormula(String pPOIFormula)

{

final String cstReplaceString = "ATTR(semiVolatile)"; //$NON-NLS-1$

StringBuffer result = null;

int index;

result = new StringBuffer();

index = pPOIFormula.indexOf(cstReplaceString);

if (index >= 0)

{

result.append(pPOIFormula.substring(0, index));

result.append(pPOIFormula.substring(index + cstReplaceString.length()));

}

else

{

result.append(pPOIFormula);

}

return result.toString();

}

至于為什么會出現ATTR(semiVolatile),還需要大家的探索精神!

4、向Excel寫入圖片的問題。

我上POI論壇查相關帖子,得到兩種結論:

1、不支持寫入圖片;

2、支持寫入圖片,通過EscherGraphics2d這個Class實現。于是我就去查EscherGraphics2d這個Class,發現 這個 Class提供了N個drawImage方法,喜出望外的我開始寫代碼,結果調了一天,一直看不到效果,黔驢技窮的我在萬般無奈下只好跟蹤進 drawImage這個函數內部,經過N個函數調用后在最底層函數發現了最終答案:

publicboolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1,

int sx2, int sy2, Color bgColor, ImageObserver imageobserver)

{

if (logger.check( POILogger.WARN ))

logger.log(POILogger.WARN,"drawImage() not supported");

returntrue;

}

所以我強烈建議大家,以后使用第三方開發包一定盡量下載它的源代碼,這樣你在碰到問題時,看看它的的內部是怎么實現的,很多時候就可以不必重蹈我的 覆轍了。既然POI不能寫入圖片,那我們只能把目光投向JXL,我用JXL寫入圖片功能是實現了,付出的代價是now()和today()這些函數丟失掉 了,魚與熊掌不能兼得吧。

==========================jsp操作===============================

response.setHeader("Content-disposition","inline; filename=test1.xls");

//以上這行設定傳送到前端瀏覽器時的檔名為test1.xls

//就是靠這一行,讓前端瀏覽器以為接收到一個excel檔

下面正常顯示要轉化的表

介紹:

Jakarta_POI 使用Java讀寫Excel(97-2002)文件,可以滿足大部分的需要。

因為剛好有一個項目使用到了這個工具,花了點時間順便翻譯了一下POI本身

帶的一個Guide.有一些節減和修改,希望給使用這個項目的人一些入門幫助。

POI 下面有幾個自項目:HSSF用來實現Excel 的讀寫.以下是HSSF的主頁

http://jakarta.apache.org/poi/hssf/index.html

下面的介紹是基于以下地址的翻譯:

http://jakarta.apache.org/poi/hssf/quick-guide.html

目前的版本為1.51應該是很長時間之內的一個穩定版,但HSSF提供的Sample不是基于

1.51所寫,所以使用的時候需要適當的注意.

其實POI下面的幾個子項目側重不同讀寫 Word 的HDF正在開發當中.

XML下的FOP(http://xml.apache.org/fop/index.html)

可以輸出pdf文件,也是比較好的一個工具

目錄:

創建一個workbook

創建一個sheet

創建cells

創建日期cells

設定單元格格式

說明:

以下可能需要使用到如下的類

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.hssf.util.HSSFColor;

創建workbook

HSSFWorkbook wb = new HSSFWorkbook();

//使用默認的構造方法創建workbook

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

//指定文件名

wb.write(fileOut);

//輸出到文件

fileOut.close();

創建一個sheet

HSSFWorkbook wb = new HSSFWorkbook();

HSSFSheet sheet1 = wb.createSheet("new sheet");

//workbook創建sheet

HSSFSheet sheet2 = wb.createSheet("second sheet");

//workbook創建另外的sheet

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);

fileOut.close();

創建cells

HSSFWorkbook wb = new HSSFWorkbook();

HSSFSheet sheet = wb.createSheet("new sheet");

//注意以下的代碼很多方法的參數是short 而不是int 所以需要做一次類型轉換

HSSFRow row = sheet.createRow((short)0);

//sheet 創建一行

HSSFCell cell = row.createCell((short)0);

//行創建一個單元格

cell.setCellValue(1);

//設定單元格的值

//值的類型參數有多中double ,String ,boolean,

row.createCell((short)1).setCellValue(1.2);

row.createCell((short)2).setCellValue("This is a string");

row.createCell((short)3).setCellValue(true);

// Write the output to a file

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);

fileOut.close();

創建日期cells

HSSFWorkbook wb = new HSSFWorkbook();

HSSFSheet sheet = wb.createSheet("new sheet");

HSSFRow row = sheet.createRow((short)0);

HSSFCell cell = row.createCell((short)0);

//設定值為日期

cell.setCellValue(new Date());

HSSFCellStyle cellStyle = wb.createCellStyle();

//指定日期顯示格式

cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));

cell = row.createCell((short)1);

cell.setCellValue(new Date());

//設定單元格日期顯示格式

cell.setCellStyle(cellStyle);

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);

fileOut.close();

設定單元格格式

單元格格式的設定有很多形式包括單元格的對齊方式,內容的字體設置,

單元格的背景色等,因為形式比較多,只舉一些例子.以下的例子在

POI1.5中可能會有所改變具體查看API.

..........

// Aqua background

HSSFCellStyle style = wb.createCellStyle();

//創建一個樣式

style.setFillBackgroundColor(HSSFCellStyle.AQUA);

//設定此樣式的的背景顏色填充

style.setFillPattern(HSSFCellStyle.BIG_SPOTS);

//樣式的填充類型。

//有多種式樣如:

//HSSFCellStyle.BIG_SPOTS

//HSSFCellStyle.FINE_DOTS

//HSSFCellStyle.SPARSE_DOTS等

style.setAlignment(HSSFCellStyle.ALIGN_CENTER );

//居中對齊

style.setFillBackgroundColor(HSSFColor.GREEN.index);

//設定單元個背景顏色

style.setFillForegroundColor(HSSFColor.RED.index);

//設置單元格顯示顏色

HSSFCell cell = row.createCell((short) 1);

cell.setCellValue("X");

cell.setCellStyle(style);

-----------------------------------------------------------------

加上response.setContentType("Application/msexcel");

response.setHeader("Content-disposition","attachment; filename=book.xls" );

然后提交給它的時候會時候會提示下載,

下載的就是生成的EXCEL文件。

-----------------------------------------------------------

有趣的是,對一個html文件(數據在表格中),當把后綴改為xls后,打開文件即是。

------------------------------------------

加上response.setContentType("Application/msexcel");

response.setHeader("Content-disposition","attachment; >>filename=book.xls" );

然后提交給它的時候會時候會提示下載,

下載的就是生成的EXCEL文件。

book.xls的存放路徑應該是哪里?

----------------------------------------------------------------

使用poi的hssf生成一個excel文件以后

有一個主類Workbook(相當于一個excel文件)的方法

Workbook.write(OutputStream)可以寫到response.getOutputStream()里面

如果事先設置response的contentType為excel和下載的附件名稱就可下載excel

HSSFWorkbook book = _proxy.expertExcel(_formBean,_login);

if(book!=null)

{

response.setContentType ( "application/ms-excel" ) ;

response.setHeader ( "Content-Disposition" ,

"attachment;filename="+new String("導出Excel.xls".getBytes(),"iso-8859-1"))

;

book.write(response.getOutputStream());

}

其中expertExcel無非是從數據庫或者其他地方獲取數據創建excel即可.

response.setHeader("Content-disposition","attachment; filename=book.xls" );

原來加上attachment瀏覽器就會提示保存或者打開,是我想要的。Thanks all.

1.用poi生成Excel文件,和WORD文檔都可以,是個不錯的方法,參見poi網站,樓上的朋友描述的很清楚了,此方法適用于生

成,讀取,解析xls文件

2.另外一種更簡單的方法:只適用于顯示用的EXCEL文件格式,生成常規的html文件格式,后綴命名方式為.xls即可.

3.espreadsheet適用于網上即時的excel文件交互操作,生成,解析,保存修改,但需要購買

生成一個rtf文件,然后擴展名寫".doc",OK

用這個組件向excel寫數據時,總是出現中文亂碼情況,請問怎樣解決?

源代碼:

HSSFWorkbook wb = new HSSFWorkbook();

HSSFSheet sheet = wb.createSheet("new sheet");

HSSFHeader header = sheet.getHeader();

header.setCenter("Center Header");

HSSFRow row = sheet.createRow((short)0);

HSSFCell cell = row.createCell((short)0);

cell.setCellValue(1);

row.createCell((short)1).setCellValue(1.2123654);

row.createCell((short)2).setCellValue("This is a string");

row.createCell((short)3).setCellValue(true);

row = sheet.createRow((short)1);

cell = row.createCell((short)0);

cell.setCellValue(new Date());

row.createCell((short)1).setCellValue(str);

row.createCell((short)2).setCellValue("This我是一個好人string");

FileOutputStream fileOut = new FileOutputStream("d:/filename.xls");

wb.write(fileOut);

fileOut.close();

當我打開這個"d:/filename.xls"文件時,其中寫入的中文全都是亂碼!!!

如何解決???

response.setHeader("Content-disposition","inline; filename=***.xls");就可以了,要是想要word 就

response.setHeader("Content-disposition","inline; filename=test1.xls");

引用 pengruihua 說:

有趣的是,對一個html文件(數據在表格中),當把后綴改為xls后,打開文件即是。

這個只能說明excel強,這樣寫得xls,在JXL或者POI中都是不認的。

加一句,用POI寫Excel有點問題,當反復讀寫一個excel文件的時候,讀的速度會越來越慢。

我的一個生成excel的就是,到了幾千條記錄的時候慢得就不能接受了,最后只好先生成csv的文本,再將文本導成xls

使用POI這樣處理中文

HSSFCell cell = row.createCell((short)1);

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

cell.setCellValue("中文");

http://gaochun091024.blog.51cto.com/6643038/1242195 這個鏈接介紹的方法還是不錯的~可以看看收起

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的linux百万行数据加分页符,百万级数据量报表全量导出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。