本文目錄一覽:
java excel 解析 什麼開源工具好?
推薦使用poi,這是用的最多的,導入導出都非常方便。
JAVA 使用POI製作表格,而且都是開源的。POI是Apace公司開發的,對中文的支持比較弱一些;而JExcelAPI是韓國公司開發的,不僅對中文的支持好,而且由於是純JAVA編寫的,所以可以跨平台操作。
HSSFCell cell = row.createCell((short) 0);
//設置此單元格的格式為文本,此句可以省略,Excel會自動識別。
//其他還有幾種常用的格式,請參考本文底部的補充部分。
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//此處是3.0.1版的改進之處,上一版可以直接setCellValue(“Hello, World!”),
//但是在3.0.1里,被deprecated了。
cell.setCellValue(new HSSFRichTextString(“Hello, World!”));
//創建一個文件輸出流,指定到C盤根目錄下(C盤都有吧?)
//xls是Excel97-2003的標準擴展名,2007是xlsx,目前的POI能直接生產的還是xls格式,
//如果此處把擴展名改成xlsx,在用Excel2007打開此文件時會報錯。
小技巧,快捷操作:可以用鼠標左鍵選中poi-3.0.1-FINAL-20070705.jar但不鬆開,拖到任務欄的Eclipse圖標上等候1秒左右,Eclipse會自動彈起來,依然不鬆開移動到lib文件夾上,這個時候鼠標後面跟個十字符號,鬆開左鍵,就完成了複製動作。這個是對整個windows系統都好用的快捷複製方式,視源盤符和目標盤符的不同偶爾會用到Ctrl鍵。
怎樣在java中導出xls文件
通過這個例子,演示以下如何用java生成excel文件:
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();
}
}
從以上例子,可以清楚的看到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站點是:
示例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 );
}
}
}
這裡演示創建和設置字體和單元格的格式,然後再應用這些格式:
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怎麼把xls格式的文件另存為xlsx文件,不能直接改後綴名?
一般操作Excel有專業的工具庫來實現,操作時,會考慮同時兼容不同版本的excel,你這裡將xls轉為xlsx,就是版本之間轉換,可以參考以下代碼的轉換方法,方法還是比較簡單,直接將文件另存為就可以了:
import com.spire.xls.*;
public class ExcelConversion {
public static void main(String[] args) {
Workbook wb = new Workbook();
wb.loadFromFile(“test.xls”);
wb.saveToFile(“toXLSX.xlsx”);
}
}
這裡代碼編譯環境為IntelliJ IDEA,jdk是1.8.0版本,使用Excel庫free spire.xls.jar 3.9.1。
使用java生成excel功能實現
jsp頁面
發送請求地址 s p _createExcel do
public String createExcel() { try { HttpServletResponse response = ServletActionContext getResponse(); OutputStream os = response getOutputStream(); response reset(); response setContentType( application/msexcel;charset=gbk ); //設置響應格式
//設置響應頭 即報表頭 response setHeader( Content disposition attachment;filename= + new String( 業務受理量統計報表 getBytes() iso ) + xls );
HSSFWorkbook hwb = new HSSFWorkbook(); HSSFSheet sheet = hwb createSheet( new Sheet ); hwb setSheetName( 業務受理量統計 );
HSSFRow row = sheet createRow((short) ); sheet createFreezePane( );//設置第一行顯示內容 createCell(hwb row (short) 業務類型 ); createCell(hwb row (short) 操作名稱 ); createCell(hwb row (short) 數量 ); createCell(hwb row (short) 收取金額 ); createCell(hwb row (short) 工號 );
//busBeans列表 為要顯示的數據
for (int i = ; i = busBeans size(); i++) { HSSFRow row = sheet createRow((short) i); for (int j = ; j ; j++) { if (j == ) { createCell(hwb row (short) j busBeans get(i ) getStatName()); } else if (j == ) { createCell(hwb row (short) j busBeans get(i ) getFunName()); } else if (j == ) { createCell(hwb row (short) j busBeans get(i ) getCountNum()); } else if (j == ) { createCell(hwb row (short) j busBeans get(i ) getMoney()); } else if (j == ) { createCell(hwb row (short) j busBeans get(i ) getLoginNo()); } } hwb write(os); os close(); return createSuccess ; } catch (Throwable e) { e printStackTrace(); this forwardError(e getMessage()); } return fail ; }
lishixinzhi/Article/program/Java/hx/201311/26089
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/279275.html