導航:首頁 > 文件類型 > java使用poi導出excel文件

java使用poi導出excel文件

發布時間:2024-07-07 15:24:55

A. POI導出excel表時文件名變成亂碼怎麼辦

在用POI進行excel表導出時,遇到中文文件名亂碼問題,用下面的方法得到了解決。

轉載自:https://my.oschina.NET/chinamummy29/blog/525639
在導出前對名稱根據瀏覽器做下處理
[java] view plain
<code class="hljs typescript" style=""><span class="hljs-comment" style="">// 判斷瀏覽器類型,firefox瀏覽器做特殊處理,否則下載文件名亂碼</span>
<span class="hljs-keyword" style="">public</span> <span class="hljs-keyword" style="">static</span> <span class="hljs-built_in" style="">void</span> compatibleFileName(HttpServletRequest request, HttpServletResponse response, <span class="hljs-built_in" style="">String</span> excelname) throws UnsupportedEncodingException {
<span class="hljs-built_in" style="">String</span> agent = request.getHeader(<span class="hljs-string" style="">"USER-AGENT"</span>).toLowerCase();
response.setContentType(<span class="hljs-string" style="">"application/vnd.ms-excel"</span>);
<span class="hljs-built_in" style="">String</span> fileName = excelname;
<span class="hljs-built_in" style="">String</span> codedFileName = java.net.URLEncoder.encode(fileName, <span class="hljs-string" style="">"UTF-8"</span>);
<span class="hljs-keyword" style="">if</span> (agent.contains(<span class="hljs-string" style="">"firefox"</span>)) {
response.setCharacterEncoding(<span class="hljs-string" style="">"utf-8"</span>);
response.setHeader(<span class="hljs-string" style="">"content-disposition"</span>, <span class="hljs-string" style="">"attachment;filename="</span> + <span class="hljs-keyword" style="">new</span> <span class="hljs-built_in" style="">String</span>(fileName.getBytes(), <span class="hljs-string" style="">"ISO8859-1"</span>) + <span class="hljs-string" style="">".xls"</span>);
} <span class="hljs-keyword" style="">else</span> {
response.setHeader(<span class="hljs-string" style="">"content-disposition"</span>, <span class="hljs-string" style="">"attachment;filename="</span> + codedFileName + <span class="hljs-string" style="">".xls"</span>);
}
}</code>

B. poi如何通過模板導出excel

共分為六部完成根據模板導出excel操作:
第一步、設置excel模板路徑(setSrcPath)
第二步、設置要生成excel文件路徑(setDesPath)
第三步、設置模板中哪個Sheet列(setSheetName)
第四步、獲取所讀取excel模板的對象(getSheet)
第五步、設置數據(分為6種類型數據:setCellStrValue、setCellDateValue、 setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)
第六步、完成導出 (exportToNewFile)

C. JAVA POI 瀵煎嚭 EXCEL妯℃澘 鎬庝箞璁劇疆鍗曞厓鏍兼牸寮忎負 鏂囧瓧

鍙傝冧唬鐮 public static void createColHeader(HSSFSheet sheet, CellStyle cellStyle,String[] columHeader) {if (sheet != null) { sheet.setDefaultColumnWidth(20); HSSFRow row = sheet.createRow(0); for (int i = 0; i < columHeader.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellValue(columHeader[i]); if (cellStyle != null) { cell.setCellStyle(cellStyle); } } freezePane(sheet,0,1,0,1); }}

D. java 鎿嶄綔poi 瀵煎嚭excel 澶氫釜sheet

String[]handers={'1','2','4','5','6'};
HSSFWorkbookwb=newHSSFWorkbook();//鍒涘緩宸ヤ綔綈
HSSFSheetsheet=wb.createSheet("sheet1");//絎涓涓猻heet
HSSFRowrowFirst=sheet.createRow(0);//絎涓涓猻heet絎涓琛屼負鏍囬
//鍐欐爣棰樹簡
for(inti=0;i<handers.length;i++){
//鑾峰彇絎涓琛岀殑姣忎竴涓鍗曞厓鏍
HSSFCellcell=rowFirst.createCell(i);
//寰鍗曞厓鏍奸噷闈㈠啓鍏ュ
cell.setCellValue(handers[i]);
}
//鍐欐暟鎹闆
//鍋囧畾鏁版嵁闆嗘槸list闆嗗悎
for(inti=0;i<list.size;i++){
//鑾峰彇list閲岄潰瀛樺湪鏄鏁版嵁闆嗗硅薄
Objectobj=list.get(i);
//鍒涘緩鏁版嵁琛
HSSFRowrow=sheet.createRow(i+1);
//璁劇疆瀵瑰簲鍗曞厓鏍肩殑鍊
row.createCell(0).setCellValue("obj鐨勫睘鎬0");
row.createCell(1).setCellValue("obj鐨勫睘鎬1");
row.createCell(2).setCellValue("obj鐨勫睘鎬2");
row.createCell(3).setCellValue("obj鐨勫睘鎬3");
row.createCell(4).setCellValue("obj鐨勫睘鎬4");
row.createCell(5).setCellValue("obj鐨勫睘鎬5");
}
//鍐欏嚭鏂囦歡錛坧ath涓烘枃浠惰礬寰勫惈鏂囦歡鍚嶏級
OutputStreamos=newFileOutputStream(newFile(path));
wb.write(os);
浠ヤ笂浠g爜涓哄啓鍑哄崟涓猻heet錛屽氫釜sheet鍏跺疄鏄鍚岀悊鐨勶紒鍏抽敭灝辨槸鍦ㄥ壋寤簊heet鐨勬椂鍊欎繚璇乻heet鍚嶅瓧涓嶅悓錛屽逛簬浣犵殑闇奼傦紝涓浜哄緩璁鍒╃敤闈㈠悜瀵瑰儚鐨勬濇兂鏋勫緩涓涓猠xcel瀵硅薄錛屽瑰儚灞炴ф湁鏂囦歡鍚嶏紝鏂囦歡sheet錛岀劧鍚庡湪鏄痵heet瀵硅薄鍖呭惈鏍囬橈紝鏁版嵁闆嗗睘鎬э紝蹇橀噰綰籌紝璋㈣阿錛

E. 急!!!java用poi導出excel文件,打開導出的文件時報錯「文件錯誤,數據可能丟失」

用java寫完文件後需要關閉文件流,如果不關閉就會報這個錯。
因為你的文件內容寫完了,所以內容沒有缺失,但excel檢測到文件沒有正常結束,所以報錯。
另存是由excel重寫了完整的文件,所以可以解決問題。
關閉文件例子:
FileOutputStream os = new FileOutputStream("workbook.xls");
wb.write(os);
os.close();

F. java導出數據到excel的幾種方法的比較

Excel的兩種導出入門方法(JAVA與JS)

最近在做一個小項目作為練手,其中使用到了導出到Excel表格,一開始做的是使用JAVA的POI導出的,但因為我的數據是爬蟲爬出來的,數據暫時並不保存在資料庫或後台,所以直接顯示在HTML的table,需要下載時又要將數據傳回後台然後生成Excel文件,最後再從伺服器下載到本地,過程幾度經過網路傳輸,感覺比較耗時與浪費性能,於是想著在HTML中的Table直接導到Excel中節約資源

JAVA導出EXCEL(.xls)

導出Excel用的插件是apache的poi.jar,maven地址如下

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version></dependency>

1. 簡單應用

先來個簡化無樣式的Excel導出,由於我的數據存在JSON中,所以形參是JSONArray,朋友們根據自己的實際數據類型(Map,List,Set等)傳入即可 ,代碼如下

/**
* 創建excel並填入數據
* @author LiQuanhui
* @date 2017年11月24日 下午5:25:13
* @param head 數據頭
* @param body 主體數據
* @return HSSFWorkbook
*/
public static HSSFWorkbook expExcel(JSONArray head, JSONArray body) { //創建一個excel工作簿
HSSFWorkbook workbook = new HSSFWorkbook(); //創建一個sheet工作表
HSSFSheet sheet = workbook.createSheet("學生信息");
//創建第0行表頭,再在這行里在創建單元格,並賦值
HSSFRow row = sheet.createRow(0);
HSSFCell cell = null; for (int i = 0; i < head.size(); i++) {
cell = row.createCell(i);
cell.setCellValue(head.getString(i));//設置值
}
//將主體數據填入Excel中
for (int i = 0, isize = body.size(); i < isize; i++) {
row = sheet.createRow(i + 1);
JSONArray stuInfo = body.getJSONArray(i); for (int j = 0, jsize = stuInfo.size(); j < jsize; j++) {
cell = row.createCell(j);
cell.setCellValue(stuInfo.getString(j));//設置值
}
} return workbook;
}

創建好Excel對象並填好值後(就是得到workbook),就是將這個對象以文件流的形式輸出到本地上去,代碼如下

/**
* 文件輸出
* @author LiQuanhui
* @date 2017年11月24日 下午5:26:23
* @param workbook 填充好的workbook
* @param path 存放的位置
*/
public static void outFile(HSSFWorkbook workbook,String path) {
OutputStream os=null; try {
os = new FileOutputStream(new File(path));
workbook.write(os);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}

至此Excel的導出其實已經做完了。

2. 添加樣式後導出

但通常這並不能滿足我們的需求,因為通常是需要設置Excel的一些樣式的,如字體、居中等等,設置單元格樣式主要用到這個類(HSSFCellStyle)

HSSFCellStyle cellStyle = workbook.createCellStyle();

現在說說HSSFCellStyle都能幹些什麼

HSSFCellStyle cellStyle = workbook.createCellStyle();//創建單元格樣式對象1.設置字體
HSSFFont font = workbook.createFont(); //font.setFontHeight((short)12);//這個設置字體會很大
font.setFontHeightInPoints((short)12);//這才是我們平常在Excel設置字體的值
font.setFontName("黑體");//字體:宋體、華文行楷等等
cellStyle.setFont(font);//將該字體設置進去2.設置對齊方式
cellStyle.setAlignment(horizontalAlignment);//horizontalAlignment參考下面給出的參數
//以下是最常用的三種對齊分別是居中,居左,居右,其餘的寫代碼的時候按提示工具查看即可
HorizontalAlignment.CENTER
HorizontalAlignment.LEFT
HorizontalAlignment.RIGHT3.設置邊框
cellStyle.setBorderBottom(border); // 下邊框
cellStyle.setBorderLeft(border);// 左邊框
cellStyle.setBorderTop(border);// 上邊框
cellStyle.setBorderRight(border);// 右邊框
//border的常用參數如下
BorderStyle.NONE 無邊框
BorderStyle.THIN 細邊框
BorderStyle.MEDIUM 中等粗邊框
BorderStyle.THICK 粗邊框//其餘的我也描述不清是什麼形狀,有興趣的到時可以直接測試

在經過一系列的添加樣式之後,最後就會給單元格設置樣式

cell.setCellStyle(cellStyle);

3. 自動調整列寬

sheet.autoSizeColumn(i);//i為第幾列,需要全文都單元格居中的話,需要遍歷所有的列數

4. 完整的案例

public class ExcelUtils { /**
* 創建excel並填入數據
* @author LiQuanhui
* @date 2017年11月24日 下午5:25:13
* @param head 數據頭
* @param body 主體數據
* @return HSSFWorkbook
*/
public static HSSFWorkbook expExcel(JSONArray head, JSONArray body) {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("學生信息");

HSSFRow row = sheet.createRow(0);
HSSFCell cell = null;

HSSFCellStyle cellStyle = workbook.createCellStyle();
setBorderStyle(cellStyle, BorderStyle.THIN);
cellStyle.setFont(setFontStyle(workbook, "黑體", (short) 14));
cellStyle.setAlignment(HorizontalAlignment.CENTER);
for (int i = 0; i < head.size(); i++) {
cell = row.createCell(i);
cell.setCellValue(head.getString(i));
cell.setCellStyle(cellStyle);
}

HSSFCellStyle cellStyle2 = workbook.createCellStyle();
setBorderStyle(cellStyle2, BorderStyle.THIN);
cellStyle2.setFont(setFontStyle(workbook, "宋體", (short) 12));
cellStyle2.setAlignment(HorizontalAlignment.CENTER); for (int i = 0, isize = body.size(); i < isize; i++) {
row = sheet.createRow(i + 1);
JSONArray stuInfo = body.getJSONArray(i); for (int j = 0, jsize = stuInfo.size(); j < jsize; j++) {
cell = row.createCell(j);
cell.setCellValue(stuInfo.getString(j));
cell.setCellStyle(cellStyle2);
}
} for (int i = 0, isize = head.size(); i < isize; i++) {
sheet.autoSizeColumn(i);
} return workbook;
} /**
* 文件輸出
* @author LiQuanhui
* @date 2017年11月24日 下午5:26:23
* @param workbook 填充好的workbook
* @param path 存放的位置
*/
public static void outFile(HSSFWorkbook workbook,String path) {
OutputStream os=null; try {
os = new FileOutputStream(new File(path));
workbook.write(os);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 設置字體樣式
* @author LiQuanhui
* @date 2017年11月24日 下午3:27:03
* @param workbook 工作簿
* @param name 字體類型
* @param height 字體大小
* @return HSSFFont
*/
private static HSSFFont setFontStyle(HSSFWorkbook workbook, String name, short height) {
HSSFFont font = workbook.createFont();
font.setFontHeightInPoints(height);
font.setFontName(name); return font;
} /**
* 設置單元格樣式
* @author LiQuanhui
* @date 2017年11月24日 下午3:26:24
* @param workbook 工作簿
* @param border border樣式
*/
private static void setBorderStyle(HSSFCellStyle cellStyle, BorderStyle border) {
cellStyle.setBorderBottom(border); // 下邊框
cellStyle.setBorderLeft(border);// 左邊框
cellStyle.setBorderTop(border);// 上邊框
cellStyle.setBorderRight(border);// 右邊框
}
}

POI的功能其實還是很強大的,這里只介紹了Excel的一丁點皮毛給入門的查看,如果想對Excel進行更多的設置可以查看下面的這篇文章,有著大量的使用說明。
空谷幽瀾的POI使用詳解

JS導出EXCEL(.xls)

java的Excel導出提供了強大的功能,但也對伺服器造成了一定資源消耗,若能使用客戶端的資源那真是太好了

1. 簡單應用

JS的導出Excel非常簡單,只需要引用Jquery和tableExport.js並設置一個屬性即可

<script src="<%=basePath%>/static/js/tableExport.js" type="text/javascript"></script><script type="text/javascript">
function exportExcelWithJS(){ //獲取要導出Excel的表格對象並設置tableExport方法,設置導出類型type為excel
$('#tableId').tableExport({ type:'excel'
});
}</script><button class="btn btn-primary" type="button" style="float: right;" onclick="exportExcelWithJS()">下載本表格</button>

JS的導出就完成了,是不是特別簡單

2. 進階應用

但上面僅僅是個簡單的全表無樣式的導出
這tableExport.js還有一些其他功能,忽略行,忽略列,設置樣式等,屬性如下

<script type="text/javascript">
function exportExcelWithJS(){ //獲取要導出Excel的表格對象並設置tableExport方法,設置導出類型type為excel
$('#tableId').tableExport({ type:'excel',//導出為excel
fileName:'2017工資表',//文件名
worksheetName:'11月工資',//sheet表的名字
ignoreColumn:[0,1,2],//忽略的列,從0開始算
ignoreRow:[2,4,5],//忽略的行,從0開始算
excelstyles:['text-align']//使用樣式,不用填值只寫屬性,值讀取的是html中的
});
}</script>

G. java使用什麼技術實現excel數據的批量導入導出

java使用第三方工具包POI技術實現excel數據的批量導入導出。

舉例如下:

1、下載apache的相關jar包。poi-ooxml-3.6.jar xmlbeans-2.3.0.jar等,如圖:

2、編寫相關的讀寫類

/**

* 讀取xls文件內容

*/

private
List<XlsDto> readXls() throws
IOException {

InputStream is = new
FileInputStream("test.xls");

HSSFWorkbook hssfWorkbook = new
HSSFWorkbook(is);

XlsDto xlsDto = null;

List<XlsDto> list = new
ArrayList<XlsDto>();

// 循環工作表Sheet

for
(int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {

HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);

if
(hssfSheet == null) {

continue;

}

// 循環行Row

for
(int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {

HSSFRow hssfRow = hssfSheet.getRow(rowNum);

if
(hssfRow == null) {

continue;

}

xlsDto = new
XlsDto();

// 循環列Cell

// 0學號 1姓名 2學院 3課程名 4 成績

// for (int cellNum = 0; cellNum <=4; cellNum++) {

HSSFCell xh = hssfRow.getCell(0);

if
(xh == null) {

continue;

}

xlsDto.setXh(getValue(xh));

HSSFCell xm = hssfRow.getCell(1);

if
(xm == null) {

continue;

}

xlsDto.setXm(getValue(xm));

HSSFCell yxsmc = hssfRow.getCell(2);

if
(yxsmc == null) {

continue;

}

xlsDto.setYxsmc(getValue(yxsmc));

HSSFCell kcm = hssfRow.getCell(3);

if
(kcm == null) {

continue;

}

xlsDto.setKcm(getValue(kcm));

HSSFCell cj = hssfRow.getCell(4);

if
(cj == null) {

continue;

}

xlsDto.setCj(Float.parseFloat(getValue(cj)));

list.add(xlsDto);

}

}

return
list;

}

3、導出就是輸入到一個新的excel文件裡面

public void writeXls(List<Student> list, String path) throws Exception {

if (list == null) {原始數據為空,直接返回

return;

}

int countColumnNum = list.size();//設置列數

HSSFWorkbook book = new HSSFWorkbook(); //創建工作表對象

HSSFSheet sheet = book.createSheet("studentSheet");

// 創建第一行

HSSFRow firstRow = sheet.createRow(0);

HSSFCell[] firstCells = new HSSFCell[countColumnNum];

//創建表頭

String[] options = { "no", "name", "age", "score" };

//循環數據域

for (int j = 0; j < options.length; j++) {

firstCells[j] = firstRow.createCell(j);

firstCells[j].setCellValue(new HSSFRichTextString(options[j]));

}

//處理每一個cell的值

for (int i = 0; i < countColumnNum; i++) {

HSSFRow row = sheet.createRow(i + 1);

Student student = list.get(i);

for (int column = 0; column < options.length; column++) {

HSSFCell no = row.createCell(0);

HSSFCell name = row.createCell(1);

HSSFCell age = row.createCell(2);

HSSFCell score = row.createCell(3);

no.setCellValue(student.getNo());

name.setCellValue(student.getName());

age.setCellValue(student.getAge());

score.setCellValue(student.getScore());

}

}

File file = new File(path);

OutputStream os = new FileOutputStream(file);

System.out.println(Common.WRITE_DATA + path);

book.write(os);

os.close();

}

H. java poi導出excel要雙擊才顯示換行

對於Java POI,其提供的API中,沒有提供直接設置單元格「折行表示」的屬性或者方法。
我之前做這個地方的時候,是利用讀取Excel的模板來實現的。

在模板文件中,對單元格設置好「折行表示」。
Java POI調用之後,先讀取模板文件中已經設置好「折行表示」的單元格的style。
然後在輸出Excel的文件中,對需要有「折行表示」的單元格,將這個style賦給它。
這樣就在最終生成的Excel看到折行表示的效果了。

閱讀全文

與java使用poi導出excel文件相關的資料

熱點內容
中國版本文化叢書 瀏覽:210
尚學堂百戰程序員答案 瀏覽:151
有內容的文件豎版改橫版怎麼變 瀏覽:961
數據如何重合 瀏覽:367
取消硬體內存win10 瀏覽:254
今日頭條類的app有哪些 瀏覽:441
蘋果66splus的區別 瀏覽:784
java圖片略縮圖 瀏覽:407
數據表怎麼按時間排序 瀏覽:584
有鎖iphone681 瀏覽:559
數據應用公司有哪些 瀏覽:714
win10怎麼安裝uwp應用 瀏覽:809
文件夾邊夾 瀏覽:164
樂推網路科技怎麼這么多 瀏覽:215
fortran最新版本 瀏覽:233
大三不會編程怎麼辦 瀏覽:256
去掉win10自帶應用商店 瀏覽:441
家庭網路怎麼改成無線網 瀏覽:854
網路營銷調查 瀏覽:548
nginx和php下載文件 瀏覽:975

友情鏈接