導航:首頁 > 編程語言 > java生成excelxlsx

java生成excelxlsx

發布時間:2023-11-01 23:43:36

『壹』 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>

『貳』 怎麼用java實現導出excel

/**
*@authorliuwu
* Excel的導入與導出
*/
@SuppressWarnings({"unchecked"})
publicclassExcelOperate{
/**
*@authorliuwu
*這是一個通用的方法,利用了JAVA的反射機制,
*可以將放置在JAVA集合中並且符合一定條件的數據以EXCEL的形式輸出到指定IO設備上
*@paramtitle表格標題名
*@paramheaders表格屬性列名數組
*@paramdataset需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。
* 此方法支持的javabean屬性【數據類型有java基本數據類型及String,Date,byte[](圖片轉成位元組碼)】
*@paramout與輸出設備關聯的流對象,可以將EXCEL文檔導出到本地文件或者網路中
*@parampattern如果有時間數據,設定輸出格式。默認為"yyy-MM-dd"
*@throwsIOException
*/
publicstaticvoidexportExcel(Stringtitle,String[]headers,Collection<?>dataset,OutputStreamout,Stringpattern)throwsIOException{
//聲明一個工作薄
HSSFWorkbookworkbook=newHSSFWorkbook();
//生成一個表格
HSSFSheetsheet=workbook.createSheet(title);
//設置表格默認列寬度為15個位元組
sheet.setDefaultColumnWidth((short)20);
//生成一個樣式
HSSFCellStylestyle=workbook.createCellStyle();
//設置這些樣式
style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//生成一個字體
HSSFFontfont=workbook.createFont();
font.setColor(HSSFColor.VIOLET.index);
font.setFontHeightInPoints((short)12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//把字體應用到當前的樣式
style.setFont(font);
//生成並設置另一個樣式
HSSFCellStylestyle2=workbook.createCellStyle();
style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//生成另一個字體
HSSFFontfont2=workbook.createFont();
font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
//把字體應用到當前的樣式
style2.setFont(font2);
//產生表格標題行
HSSFRowrow=sheet.createRow(0);
for(shorti=0;i<headers.length;i++){
HSSFCellcell=row.createCell(i);
cell.setCellStyle(style);
HSSFRichTextStringtext=newHSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
//遍歷集合數據,產生數據行
Iterator<?>it=dataset.iterator();
intindex=0;
while(it.hasNext()){
index++;
row=sheet.createRow(index);
Objectt=it.next();
//利用反射,根據javabean屬性的先後順序,動態調用getXxx()方法得到屬性值
Field[]fields=t.getClass().getDeclaredFields();
for(shorti=0;i<fields.length;i++){
HSSFCellcell=row.createCell(i);
cell.setCellStyle(style2);
Fieldfield=fields[i];
StringfieldName=field.getName();
StringgetMethodName="get"
+fieldName.substring(0,1).toUpperCase()
+fieldName.substring(1);//注意實體getSet不要自己改名字不然反射會有問題
try{
ClasstCls=t.getClass();
MethodgetMethod=tCls.getMethod(getMethodName,newClass[]{});
Objectvalue=getMethod.invoke(t,newObject[]{});
HSSFRichTextStringrichString=newHSSFRichTextString(value.toString());
HSSFFontfont3=workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);
richString.applyFont(font3);
cell.setCellValue(richString);
}catch(SecurityExceptione){
e.printStackTrace();
e=null;
}catch(NoSuchMethodExceptione){
e.printStackTrace();
e=null;
}catch(IllegalArgumentExceptione){
e.printStackTrace();
e=null;
}catch(IllegalAccessExceptione){
e.printStackTrace();
e=null;
}catch(InvocationTargetExceptione){
e.printStackTrace();
e=null;
}finally{
//清理資源
}
}
}
try{
workbook.write(out);
}catch(IOExceptione){
e.printStackTrace();
e=null;
}
}
}

『叄』 java導出excel,excel打不開,報文件格式無效,怎麼解決!

兩個原因:
1.你的excel模版本身有問題,可以嘗試新建一個模版。
2.你的excel使用了一些POI不支持的函數。
解決辦法:
另存是由excel重寫了完整的文件,可以解決問題。
關閉文件例子:
FileOutputStream os = new FileOutputStream("workbook.xls");
wb.write(os);
os.close();
在保護狀態下execl的格式有可能正在被使用,你這邊修改,准確說是線程沖突,一般excel值會作為導出文件的模板,是不會編輯的。你可以在讀的時候判斷execl是否正在被使用。
下面的代碼問題,你可以參考
package com.hwt.glmf.common;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;
/**
* 導出Excel公共方法
* @version 1.0
*
* @author wangcp
*
*/
public class ExportExcel extends BaseAction {
//顯示的導出表的標題
private String title;
//導出表的列名
private String[] rowName ;
private List<Object[]> dataList = new ArrayList<Object[]>();
HttpServletResponse response;
//構造方法,傳入要導出的數據
public ExportExcel(String title,String[] rowName,List<Object[]> dataList){
this.dataList = dataList;
this.rowName = rowName;
this.title = title;
}
/*
* 導出數據
* */
public void export() throws Exception{
try{
HSSFWorkbook workbook = new HSSFWorkbook(); // 創建工作簿對象
HSSFSheet sheet = workbook.createSheet(title); // 創建工作表
// 產生表格標題行
HSSFRow rowm = sheet.createRow(0);
HSSFCell cellTiltle = rowm.createCell(0);
//sheet樣式定義【getColumnTopStyle()/getStyle()均為自定義方法 - 在下面 - 可擴展】
HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//獲取列頭樣式對象
HSSFCellStyle style = this.getStyle(workbook); //單元格樣式對象
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));
cellTiltle.setCellStyle(columnTopStyle);
cellTiltle.setCellValue(title);
// 定義所需列數
int columnNum = rowName.length;
HSSFRow rowRowName = sheet.createRow(2); // 在索引2的位置創建行(最頂端的行開始的第二行)
// 將列頭設置到sheet的單元格中
for(int n=0;n<columnNum;n++){
HSSFCell cellRowName = rowRowName.createCell(n); //創建列頭對應個數的單元格
cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); //設置列頭單元格的數據類型
HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
cellRowName.setCellValue(text); //設置列頭單元格的值
cellRowName.setCellStyle(columnTopStyle); //設置列頭單元格樣式
}

『肆』 誰能給我一個詳細的Java通過Apache POI導出Excel方法,最好能給完整代碼

package com.test;
/**
* 需要的jar包:
* poi-3.0.2-FINAL-20080204.jar
* poi-contrib-3.0.2-FINAL-20080204.jar
*poi-scratchpad-3.0.2-FINAL-20080204.jar
* poi-3.5-beta6-20090622.jar
* geronimo-stax-api_1.0_spec-1.0.jar
* ooxml-schemas-1.0.jar
* openxml4j-bin-beta.jar
* poi-ooxml-3.5-beta6-20090622.jar
*xmlbeans-2.3.0.jar
* dom4j-1.6.1.jar
*/
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.poi.POIOLE2TextExtractor;
import org.apache.poi.POITextExtractor;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.extractor.ExtractorFactory;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.hwpf.extractor.wordExtractor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.xmlbeans.XmlException;
public class WordAndExcelExtractor {
public static void main(String[] args) {
try {
// 讀取word
String wordFile = "D:/1.doc";
//String wordText2007 = WordAndExcelExtractor.extractTextFromDOC2007(wordFile);
//System.out.println("wordText2007=======" + wordText2007);
InputStream isword = new FileInputStream(wordFile);
WordExtractor wordExtractor = new WordExtractor(isword);
System.out.println("word========" + wordExtractor.getText());
// 讀取 Excel
InputStream is = new FileInputStream("D:/測試.xls");
String excelText = WordAndExcelExtractor.extractTextFromXLS(is);
System.out.println("text2003==========" + excelText);
String excelFile = "D:/test2.xlsx";
String excelText2007 = WordAndExcelExtractor
.extractTextFromXLS2007(excelFile);
System.out.println("excelText2007==========" + excelText2007);
// 讀取 PPT
PowerPointExtractor ppe = new PowerPointExtractor("D:/test.ppt");
System.out.println("ppt2003===============" + ppe.getText());
// System.out.println("###############################");
// System.out.println(ppe.getText(true, true, true, true));
//
// InputStream is = new FileInputStream("D:/test.ppt");
// PowerPointExtractor ppt2003 = new PowerPointExtractor(is);
// System.out.println(ppt2003.getText());
System.out.println("************************************");
XSLFPowerPointExtractor ppt = new XSLFPowerPointExtractor(
POIXMLDocument.openPackage("D:/test2.pptx"));
System.out.println("ppt2007============================="
+ ppt.getText());
/* 讀取PDF */
InputStream in = new FileInputStream("D:/test.pdf");
PDDocument pdfDocument = PDDocument.load(in);
if (pdfDocument.isEncrypted()) {
// 僅僅嘗試使用默認密碼打開加密的PDF
pdfDocument.decrypt("");
}
PDFTextStripper stripper = null;
// 創建一個writer用來作來存儲文件正文
StringWriter writer = new StringWriter();
if (stripper == null) {
stripper = new PDFTextStripper();
} else {
stripper.resetEngine();
}
stripper.writeText(pdfDocument, writer);
String contents = writer.getBuffer().toString();
System.out.println("pdfd===" + contents);

/* 向Word中寫入數據 */
byte[] a = contents.getBytes();
ByteArrayInputStream bs = new ByteArrayInputStream(a);
POIFSFileSystem fs = new POIFSFileSystem();
// /////////////////////////////////
DirectoryEntry directory = fs.getRoot();
DocumentEntry de = directory.createDocument("WordDocument", bs);
// 以上兩句代碼不能省略,否則輸出的是亂碼
FileOutputStream fos = new FileOutputStream("D:\\dd.doc");
fs.writeFilesystem(fos);
bs.close();
fos.flush();
fos.close();
System.out.println("寫入成功");

} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @Method: extractTextFromXLS
* @Description: 從excel 2003檔中提取純文本
*
* @param
* @return String
* @throws
*/
@SuppressWarnings("deprecation")
private static String extractTextFromXLS(InputStream is) throws IOException {
StringBuffer content = new StringBuffer();
HSSFWorkbook workbook = new HSSFWorkbook(is); // 創建對Excel工作簿文件的引用
for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (null != workbook.getSheetAt(numSheets)) {
HSSFSheet aSheet = workbook.getSheetAt(numSheets); // 獲得一個sheet
content.append(aSheet.getSheetName());
content.append("\r\n-----------------------\r\n");
for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet
.getLastRowNum(); rowNumOfSheet++) {
if (null != aSheet.getRow(rowNumOfSheet)) {
HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 獲得一行
for (short cellNumOfRow = 0; cellNumOfRow <= aRow
.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
HSSFCell aCell = aRow.getCell(cellNumOfRow); // 獲得列值
if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
content.append(aCell.getNumericCellValue());
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
content.append(aCell.getBooleanCellValue());
} else {
content.append(aCell.getStringCellValue());
}
content.append("\t");
}
}
content.append("\r\n");
}
}
}
}
return content.toString();
}
/**
* @Method: extractTextFromXLS2007
* @Description: 從excel 2007文檔中提取純文本
*
* @param
* @return String
* @throws
*/
private static String extractTextFromXLS2007(String fileName)
throws Exception {
StringBuffer content = new StringBuffer();
// 構造 XSSFWorkbook 對象,strPath 傳入文件路徑
XSSFWorkbook xwb = new XSSFWorkbook(fileName);
// 循環工作表Sheet
for (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) {
XSSFSheet xSheet = xwb.getSheetAt(numSheet);
if (xSheet == null) {
continue;
}
// 循環行Row
for (int rowNum = 0; rowNum <= xSheet.getLastRowNum(); rowNum++) {
XSSFRow xRow = xSheet.getRow(rowNum);
if (xRow == null) {
continue;
}
// 循環列Cell
for (int cellNum = 0; cellNum <= xRow.getLastCellNum(); cellNum++) {
XSSFCell xCell = xRow.getCell(cellNum);
if (xCell == null) {
continue;
}
if (xCell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {
content.append(xCell.getBooleanCellValue());
} else if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
content.append(xCell.getNumericCellValue());
} else {
content.append(xCell.getStringCellValue());
}
}
}
}
return content.toString();
}
}

這是POI jar包的下載地址,我下載的是3.9版本的
http://poi.apache.org/download.html

『伍』 java JXL操作EXCEL創建文件後綴名為.xlsx的,也就是2007版本以上的

try{

SysCodeTemplateForm scpForm = (SysCodeTemplateForm) form;
FormFile formfile = scpForm.getUploadfile();
SysCodeTemplate scp = new SysCodeTemplate();
String reportfn = formfile.getFileName();
String savePath = "D:\\";
byte[] b = formfile.getFileData();
File file = new File(savePath);
if (!file.exists()) {
file.mkdirs();
}
File uploadFile = new File(file, reportfn);

FileOutputStream fops = new FileOutputStream(uploadFile);
fops.write(b);
fops.close();
XSSFWorkbook wookbook = new XSSFWorkbook(new FileInputStream(uploadFile));
XSSFSheet sheet = wookbook.getSheet("Sheet1");
int rows = sheet.getPhysicalNumberOfRows();
ArrayList<SysCodeTemplate> list1 = new ArrayList<SysCodeTemplate>();
ArrayList<SysCode> list2 = new ArrayList<SysCode>();
for (int i = 1; i < rows; i++) {
XSSFRow row = sheet.getRow(i);
if (row != null) {
int cells = row.getPhysicalNumberOfCells();
String value = "";
for (int j = 0; j < cells; j++) {
XSSFCell cell = row.getCell(j);
if (cell != null) {
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_NUMERIC:
value += (long)cell.getNumericCellValue() + ",";
break;
case XSSFCell.CELL_TYPE_STRING:
value += cell.getStringCellValue() + ",";
break;
}
}
}
String valu = value.substring(0, value.length()-1);
String[] val = valu.split(",");
scp.setCodeCode(val[0]);
scp.setCodeName(val[1]);
scp.setCodeType(new Long(val[2]));
list1.add(scp);

}
}

『陸』 java將數據導出excel計算其文件大小

熱門頻道

首頁

博客

研修院

VIP

APP

問答

下載

社區
推薦頻道

活動

招聘

專題
打開CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

打開APP

大數據導出excel大小限制_java 導出Excel 大數據量,自己經驗總結! 原創
2020-12-19 01:58:16

weixin_39655377
碼齡5年
關注
分析導出實現代碼,XLSX支持:

/*** 生成XLSX,2007版本的excel,每個sheet無6.5W的行數限制,但是到了一定數量,可能內存溢出,

* 次方法適合在預計10W以下的數據導出時使用,本機測試,14W可以導出。列數量在8列左右

*

*@paramfileOut

* 輸出流

*@paramsheetMap

* 要設置的數據信息

*@throwsSQLException*/

public static voidcreateXSLXByResultSet(OutputStream fileOut, WriteXLSBean... beans)throwsSQLException {try{//重點 Workbook

Workbook wb = newXSSFWorkbook();for (int i = 0, len = beans.length; i < len; i++) {

WriteXLSBean xlsBean=beans[i];

Sheet sheet=wb.createSheet(xlsBean.getSheetName());

ResultSet rs=xlsBean.getRs();

ResultSetMetaData rsmd=rs.getMetaData();

TypeHandlerRegistry tr=BeanContext.tr;

Map th =xlsBean.getTh();int index = 0;while(rs.next()) {long t1 =System.currentTimeMillis();

org.apache.poi.ss.usermodel.Row row=sheet

.createRow(index);for (int j = 0, numberOfColumns = rsmd.getColumnCount(); j < numberOfColumns; j++) {

String key= rsmd.getColumnLabel(j + 1).toLowerCase();if(th.containsKey(key)) {

TypeHandler> type =tr.getTypeHandler(JdbcType

.forCode(rsmd.getColumnType(j+ 1)));

Object obj=type.getResult(rs, key);

row.createCell(j).setCellValue(obj== null ? "": obj.toString());

}

}

System.out.println(index+ " :"

+ (System.currentTimeMillis() -t1));

index++;

}

}//重點 Workbook

wb.write(fileOut);

}catch(IOException e) {

e.printStackTrace();throw new ServiceRunTimeException("生產xls文檔錯誤", e);

}finally{

}

}

在上面 標注了重點的兩處,分別是:

1.構建一個Excel對象

2.將該對象寫入一個OutPutStream

而在構建過程中,沒有地方寫入OutPutSteam ,也就是說必須在內存中構建整個 Excel,才能進行寫出操作,在大數據量情況下,這樣將導致所有數據載入到內存中,而不能輸出,導致最後 內存溢出。

根據運行環境不用,可能內存溢出的 情況不同

根據情況,如果數據量達到10W以上,建議使用

1、多個Excel,每個Excel一個Sheet,因為所有Sheet都是Workbook的組成部分。如果不分多個Excel,即使分Sheet也沒用,

2、每個Excel中列數適中,比如: 5W行每個Excel檔,實現分多次導出和分頁查詢原理一樣

3、對多個Excel導出到一個臨時目錄,並通過程序壓縮,然後提供給客戶下載

2003版通過資料庫結果存到List中,然後進行生產:Table 就是List Row 是Map

/*** 生產xls,2003版本的excel,每個sheet有6.5W的行數限制

*

*@paramfileOut

* 輸出流,未關閉

*@paramsheetMap

* 要導出的數據信息*/

public static void createXSLByMap(OutputStream fileOut, Map>>sheetMap) {try{

HSSFWorkbook wb= newHSSFWorkbook();

Set keys =sheetMap.keySet();for (Iterator iterator =keys.iterator(); iterator

.hasNext();) {

String SheetKey=iterator.next();

Sheet sheet=wb.createSheet(SheetKey);

List> sheetRows =sheetMap.get(SheetKey);for (int i = 0, len = sheetRows.size(); i < len; i++) {

Map cellMap =sheetRows.get(i);

Set cellSet =cellMap.keySet();

org.apache.poi.ss.usermodel.Row row=sheet.createRow(i);int j = 0;for (Iterator iterCell =cellSet.iterator(); iterCell

.hasNext(); j++) {

String cellKey=iterCell.next();

Object obj=cellMap.get(cellKey);

row.createCell(j).setCellValue(obj== null ? "": obj.toString());

}

}

}

wb.write(fileOut);

}catch(IOException e) {

e.printStackTrace();throw new ServiceRunTimeException("生產xls文檔錯誤", e);

}finally{

}

}

新版本 POI+office 2007版本excel可以導出幾十萬條而不內存溢出,詳細見:

導出大量數據到 excel 的 xlsx文件

static String src="SFGHJKJGHFERTUIO";

public static void main(String[] args) throwsThrowable {

SXSSFWorkbook wb = new SXSSFWorkbook(100); //這里100是在內存中的數量,如果大於此數量時,會寫到硬碟,以避免在內存導致內存溢出

Sheet sh =wb.createSheet();

for (int rownum = 0; rownum < 1000000; rownum++) {

Row row =sh.createRow(rownum);

for (int cellnum = 0; cellnum < 10; cellnum++) {

Cell cell =row.createCell(cellnum);

String address = newCellReference(cell).formatAsString();

cell.setCellValue(address+src.substring(rownum%10*10+1, (rownum%10+1)*10));

}

}

File file = new File("F:/aa.xlsx");

file.createNewFile();

FileOutputStream out = newFileOutputStream(file);

wb.write(out);

out.close();

}

內存使用情況:

根據以上前輩經驗,自己在結果自身需求考慮,整合出一個工具。解決了excle表.xls格式行數65535行的限制。我實現的形式是導出一張表,裡面有多頁

(我是已65000為一頁)

這里是用反射來使用所有傳入進行的實體的屬性的值。這里只針對String和基本數據類型。如有自己定義的類型需要自己加上。

packagecom.tommy.fundation.util;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;public classRelectUtil {public static List reflectEntity(T model,Class> cals) throwsNoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, NoSuchFieldException{

List list = new ArrayList();

Field[] field= model.getClass().getDeclaredFields(); //獲取實體類的所有屬性,返回Field數組

for(int j=0 ; j

String nam = field[j].getName(); //獲取屬性的名字

String name =nam;

name= name.substring(0,1).toUpperCase()+name.substring(1);

String type= field[j].getGenericType().toString(); //獲取屬性的類型

if(type.equals("class java.lang.String")){ //如果type是類類型,則前麵包含"class ",後面跟類名

Method m = model.getClass().getMethod("get"+name);

String value= (String) m.invoke(model); //調用getter方法獲取屬性值

if(value != null){

list.add(value);

}else{

list.add("");

}

}if(type.equals("class java.lang.Integer")){

Method m= model.getClass().getMethod("get"+name);

Integer value=(Integer) m.invoke(model);if(value != null){

list.add(value);

}else{

list.add("");

}

}if(type.equals("class java.lang.Short")){

Method m= model.getClass().getMethod("get"+name);

Short value=(Short) m.invoke(model);if(value != null){

list.add(value);

}else{

list.add("");

}

}if(type.equals("class java.lang.Double")){

Method m= model.getClass().getMethod("get"+name);

Double value=(Double) m.invoke(model);if(value != null){

list.add(value);

}else{

list.add("");

}

}if(type.equals("class java.lang.Boolean")){

Method m= model.getClass().getMethod("get"+name);

Boolean value=(Boolean) m.invoke(model);if(value != null){

list.add(value);

}else{

list.add("");

}

}if(type.equals("class java.util.Date")){

Method m= model.getClass().getMethod("get"+name);

Date value=(Date) m.invoke(model);if(value != null){

list.add(value);

}else{

list.add("");

}

}

}returnlist;

}

}

下面將是重點實現導出excel表

packagecom.tommy.fundation.util;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;importjavax.servlet.http.HttpServletResponse;importorg.apache.poi.hssf.record.formula.functions.T;importorg.apache.poi.hssf.usermodel.HSSFRow;importorg.apache.poi.hssf.usermodel.HSSFSheet;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;

@SuppressWarnings("hiding")public class ExportExcel{/*** 導出多張excel表,解決xls格式行數65535的限制

*@authorOnlyOne

*@paramresponse

*@paramlist 需要處理的list數據集合

*@throwsException*/@SuppressWarnings("deprecation")public void doExcel(HttpServletResponse response,List list,String fileName) throwsException {

OutputStream os= response.getOutputStream();//獲取輸出流

response.reset();//設置下載頭部信息。Content-disposition為屬性名。attachment表示以附件方式下載,如果要在頁面中打開,則改為inline。filename為文件名

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

response.setContentType("application/msexcel");

Map> sheetMap =daData(list);

HSSFWorkbook wb= newHSSFWorkbook();

Set keys =sheetMap.keySet();for (Iterator iterator =keys.iterator(); iterator.hasNext();) {

Integer SheetKey=iterator.next();

HSSFSheet sheet= wb.createSheet((fileName+SheetKey).toString());

List sheetRows =sheetMap.get(SheetKey);for (int i = 0, len = sheetRows.size(); i < len; i++) {

T en=(T) sheetRows.get(i);

List dataList = RelectUtil.reflectEntity(en, en.getClass());

HSSFRow row=sheet.createRow(i);

row.createCell(0).setCellValue(String.valueOf(i));for(int m=0; m

row.createCell(m+1).setCellValue(dataList.get(m).toString());

}

}

}

wb.write(os);

}/*** 此方法將數據集合按65000個進行分割成多個子集合

*@authorOnlyOne

*@paramlist 需要處理的list數據集合

*@return

*/

public Map> daData(Listlist){int count = list.size()/65000;int yu = list.size() % 65000;

Map> map = new HashMap>();for (int i = 0; i <= count; i++) {

List subList = new ArrayList();if (i ==count) {

subList= list.subList(i * 65000, 65000 * i +yu);

}else{

subList= list.subList(i * 65000, 65000 * (i + 1)-1);

}

map.put(i, subList);

}returnmap;

}

}

在Java中調用的方式

@RequestMapping(value = "/doExcel", method =RequestMethod.GET)public void doExcel(HttpServletResponse response,HttpServletRequest request) throwsException {

List list =enrolltgService.findAll();new ExportExcel().doExcel(response, list, "黑白淡奶");

}

大功搞成,以後再也不會為了數據量太大而導不出來煩惱了!!!

需要的包 poi-3.2-FINAL-20081019.jar

相關資源:poi讀取大文件Excel,使用xml格式解析,速度實測50mb文件13s,可指定...
打開CSDN,閱讀體驗更佳

POI多線程分表導出百萬級大數據量EXCEL導出_Zhuo_chao的博客-CSDN博 ...
由上面可知 Excel 2003及以下是無法實現單sheet百萬級的數據。 ApachePOI 簡介 Apache POI 是用Java編寫的免費開源的跨平台的 JavaAPI,Apache POI提供API給Java程式對Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式檔案讀和寫的功...
Java 使用POI導出數據到 excel,單 sheet 和多 sheet__修鐵路的的博客...
單sheet 和多 sheet,用到的jar都是一樣的,無非就是多創建一個 sheet的問題,以下是需要用到的jar包,在對應模塊的pom.xml 中引入即可 <dependency> <groupId>org.apache.poi</groupId> ...
java導出excel超出65533行
業務背景: 列表導出,數據導出超過65533行 解決方案: 1、超出65533行,直接系統提示:本系統支持導出的最大條數為65533行 2、導出模版改為.xlsx,POI導出時用XSSFWorkbook,把所有數據都拿到內存里,可以導出超過65533行,但是上線之後,發現會內存溢出 3、導出模版改為.xlsx,POI導出時用SXSSFWorkbook,每次往內存里放一定的數據,導完之後,刷新,再次...
繼續訪問
Java的poi導出的excel不能超過256列的解決辦法
Java的poi導出的excel不能超過256列的解決辦法背景1、現在的情況2、解決辦法 背景 1、現在的情況 excel文件名以.xls結尾 這個構造函數中默認採取這個類型 this.type = ExcelType.HSSF; public ExportParams(String title, String sheetName) { this.color = HSSFColorPredefined.WHITE.getIndex(); this.headerColor = HSSFC
繼續訪問
使用ApachePOI導出excel(多個sheet頁)_我是橘子京的博客
2、設置導出excel路徑 //導出的文件路徑 String filePath="D:\\excel.xls"; 1 2 3、創建excel文件 //創建Excel文件(Workbook) HSSFWorkbook workbook = new HSSFWorkbook(); 1 2 4、設置單元格樣式 //設置單元格樣式 HSSFCel...
POI3.8 導出大數據excel(50萬左右)_咖啡加糖_的博客_poi支持最...
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.streaming.SXSSFWorkbook; ...
最新發布 【JAVA問題解決方案】01.EasyExcel導出數據超過Excel單表上限解決方案
1.了解一下Excel單表最多存儲多少行數據(可以存儲1048576條數據,1024的平方,2的20次方)。本文是介紹EasyExcel導出數據超過Excel單表上限解決方案。2.知道最多多少行就能以這個數為條件,如果超過則進行分表。3.分表的同時需要對數據進行分割,才能不超過最大限度。實體類(非常簡單,為了導出表更快)
繼續訪問

java實現流輸出形式導出數據(使用EasyExcel)並打包為zip包
java實現流輸出形式文件下載並打包為zip包 pom.xml文件導入easyexcel <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.0.5</version> </d...
繼續訪問
...到excel文件(xls格式),附實驗結果(單張sheet最多可有65536行)& Fi...
使用POI導出MySQL資料庫數據到excel文件(xls格式) 注意事項:單張sheet最多存儲65536行!否則報錯! Caused by: java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535) !
使用Apache POI導出百萬條EXCEL數據_橙樂果果的博客
工作中,有這么一個需求:每天凌晨00:05分定時從資料庫導出大於三個月的訂單流水信息,保存為excel文件。 Just do it. 1.引入POM依賴 <!-- excel --> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> ...
Linux下讀寫文件操作
Linux下讀寫文件操作 #include<stdio.h> typedef struct Student { int no; char name[10]; int score; }Student; int main(int args,char *argv[]) { //打開文件 FILE *fp=fopen("test.txt","w"); if(fp=NULL) { perror("fopen"); ...
繼續訪問
Java導出超大Excel文件,防止內存溢出
Java導出超大Excel文件,防止內存溢出1.採用Poi中的SXSSFWorkbook2.maven中引入Poi3.測試過程4.單元測試Java代碼5.結論 將業務數據導出到Excel表中,導出任務數據量較大時,導出的項目就會內存溢出,本文通過Java操作Poi的SXSSFWorkbook類進行導出,解決內存溢出問題。 1.採用Poi中的SXSSFWorkbook 在實現excel導出時,在數據量過大的情況下,總是容易發生內存溢出的情況。可以使用POI提供的 SXSSFWorkbook 類來避免內存溢
繼續訪問

Apache Poi導出Excel多Sheet頁詳解!_奧鵬馬的博客
apache poi是目前比較常用導出excel的方式。最近想要實現一個導出excel多sheet頁的功能。 網上查了一下大多都是針對某個具體對象的導出,不能實現任意對象的導出。現在將自己研究出的代碼貼出來,供大家參考。 //注意:此處實現的關鍵是將...
Apache poi 導出多sheet的excel表格_朋態圈的博客
導出多sheet的excel */public class ApachePoi { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub exportExcel();} @SuppressWarnings("resource") public static String exportExcel...
java導出excel限制大小_解決java poi導出excel2003不能超過65536行的問題
/*** 如果達到50000條數據則重新創建工作表的邏輯*/@Overridepublic void exportExcel(ListformList, ServletOutputStream outputStream){try{//工作表名後面的數字,如表1,表2int i = 0;//記錄總行數int rownum = 0;//記錄每個sheet的行數int tempnum = 0;//分頁條...
繼續訪問
熱門推薦 java poi 導出Excel 超大數據量解決方案
http://blog.csdn.net/qiaoshuai0920/article/details/51800991
繼續訪問
poi導出excel,實現一個excel中多個sheet(可解決poi導出限制65536的問題...
本文章的excel實現導出多個sheet是在上一篇poi導出的基礎上實現的,這么久了,對於上一篇文章的poi也作出過一些優化。 這里我只貼修改了的方法的代碼,其餘的和上一篇文章的一樣。 /** * 導出excel.在一個頁面中單獨導出Excel ...
基於Apache POI導出(百萬級)大數據量Excel的實現_一朵風中搖曳的水仙...
支持單個 excel 的 sheet 導出100w 的數據 ApachePOI操作Excel對象 1.HSSF:操作Excel 2007之前版本(.xls)格式,生成的EXCEL不經過壓縮直接導出 2.XSSF:操作Excel 2007及之後版本(.xlsx)格式,內存佔用高於HSSF ...
解決POI的XSSFWorkbook導入大excel的內存消耗過大問題
方式1:使用SXSSFWorkbook ,經過測試,這個情況無效,因為本質上SXSSFWorkbook 也是通過XSSFWorkbook來的,他可以解決寫出excel的場景,但是解決不了我們這種用戶上傳且讀取excel中的內容的場景 XSSFWorkbook XSSFWorkbook = new XSSFWorkbook(fileInputStream); System.gc(); SXSSFWorkbook SXSSFWorkbook = new SXSS
繼續訪問
導入導出
原文地址:https://blog.csdn.net/qq_29631809/article/details/72785338 創建流程:(上級為 下級的載體) 1:.創建 工作簿 2.創建 sheet(可以創建多個) 3.創建行 4.創建單元格 接下來 分別說下 工作簿的常用三種形式的區別,他們分別是 1.HSSFWorkbook 2.XSSFWorkbook 3.SXSSFWork...
繼續訪問
NPOI導出Excel 65536限制
1 #region NPOI 導出excel數據超65535自動分表 2 /// <summary> 3 /// DataTable轉換成Excel文檔流,並輸出到客戶端 4 /// </summary> 5 /// <param name="table">...
繼續訪問
java導出csv文件 為解決導出excel時每個單元格的限制(32767)
此實現方法僅供參考 因為本人導出數據量不大所採取的方法 如數據量大,會到至內存溢出請知曉 在這還提下:導出時內容自己換行 只需在內容前尾各加雙引號就行。 如圖 1、准備導出工具類 // An highlighted block package com.test; import java.io.BufferedWriter; import java.io.File; import java.io...
繼續訪問
Excel單元格數據超過32767報錯問題處理
java poi 32767
繼續訪問
SXSSFWorkbook Excel 大量數據導出
注意 SXSSFWorkbook 用於大量數據的導出 SXSSFWorkbook是用來生成海量excel數據文件,主要原理是藉助臨時存儲空間生成excel, SXSSFWorkbook專門處理大數據,對於大型excel的創建且不會內存溢出的,就只SXSSFWorkbook了。 它的原理很簡單,用硬碟空間換內存(就像hashmap用空間換時間一樣)。 SXSSFWorkbook是streami...
繼續訪問
EXCEL大數據量導出的解決方案
將web頁面上顯示的報表導出到excel文件里是一種很常見的需求。然而,當數據量較大的情況下,excel本身的支持最多65535行數據的問題便凸顯出來。下面就給出大數據量導出到excel的解決方 案。 首先,對於數據超過了65535行的問題,很自然的就會想到將整個數據分塊,利用excel的多sheet頁的功能,將超出65535行後的數據寫入到下一個sheet頁中,即通過多sheet頁的方式,突破了...
繼續訪問
幾行代碼,復雜Excel 導入導出,真心強大!
點擊上方藍色字體,選擇「標星公眾號」優質文章,第一時間送達項目中使用:功能介紹IMPORT1、 ExcelHandle核心處理器;2、 ExcelWorkbookManageexcel所有工作表管理;3、 ExcelInitConfig配置文件初始化;4、 AbstractFileParser文件轉換類;alanpoi import有何優勢?1、 用戶不需要額外引入poi...
繼續訪問

java中poi導出excel問題總結
java中poi導出excel問題總結
繼續訪問
java POI導出excel,列數限制在256列
有兩篇文章寫得比較好的 https://www.oschina.net/code/snippet_1052786_47435 https://www.jianshu.com/p/4c6eec65fdc3
繼續訪問
apache poi導出excel最大多少個sheet
大數據導出excel大小限制
寫評論

評論

收藏

點贊



分享

『柒』 JAVA編程中用Apache POI 怎麼用SXSSFWorkbook對已存在的excel(.xlsx)操作進行寫數據操作

public SXSSFWorkbook(XSSFWorkbookworkbook)

API文檔裡面有,反正就是說,使用SXSSFWorkbook附加數據到已經存在的Excel中的話就是不行的;SXSSFSheet.getRow(int) 和 SXSSFRow.getCell(int) 會返回空。

SXSSFWorkbook只能用在新創建Excel中才行。

『捌』 淺談JAVA讀寫Excel的幾種途徑

讀寫Excel文件需要使用Excel類庫,如Free Spire.XLS for Java.

讀取Excel內容:

//創建Workbook對象
Workbookwb=newWorkbook();
//載入一個Excel文檔
wb.loadFromFile("C:\Users\Administrator\Desktop\test.xlsx");
//獲取第一個工作表
Worksheetsheet=wb.getWorksheets().get(0);
//遍歷工作表的每一行
for(inti=1;i<sheet.getLastRow()+1;i++){
//遍歷工作的每一列
for(intj=1;j<sheet.getLastColumn()+1;j++){
//輸出指定單元格的數據
System.out.print(sheet.get(i,j).getText());
System.out.print(" ");
}
System.out.print(" ");
}

寫入內容:

//創建Workbook對象
Workbookwb=newWorkbook();
//載入一個Excel文檔
wb.loadFromFile("C:\Users\Administrator\Desktop\test.xlsx");
//獲取第一個工作表
Worksheetsheet=wb.getWorksheets().get(0);
//在單元格A1寫入新數據
sheet.getCellRange("A1").setText("你好");
//保存文檔
wb.saveToFile("寫入Excel.xlsx",ExcelVersion.Version2016);

『玖』 如何用java來列印excel

importjava.io.File;

importjxl.Workbook;
importjxl.write.Label;
importjxl.write.WritableSheet;
importjxl.write.WritableWorkbook;

/**
*Excel導出(你需要引入jxl的jar包)
*/
publicclassTest{

publicstaticvoidmain(String[]args)
{
Testtest=newTest();
test.exportExcel();
}

/**
*導出(導出到磁碟)
*/
publicvoidexportExcel(){
WritableWorkbookbook=null;
try{
//打開文件
book=Workbook.createWorkbook(newFile("D:/測試.xls"));
//生成名為"學生"的工作表,參數0表示這是第一頁
WritableSheetsheet=book.createSheet("學生",0);
//指定單元格位置是第一爛激列第一行(0,0)以及單元格內容為張三
Labellabel=newLabel(0,0,"張三");
派歷扮//將定義好的單元格添加到工作表中
sheet.addCell(label);
//保存數字的單元格必須使用Number的完整包路徑
jxl.write.Numbernumber=newjxl.write.Number(1,0,30);
sheet.addCell(number);
//寫入數據並關閉文件
book.write();
}catch(Exceptione){
System.out.println(e);
}finally{
if(book!=null){
try{
book.close();
}catch(Exceptione)塵灶{
e.printStackTrace();
}
}
}
}
}

『拾』 java jxl 導出xlsx格式的excel 以前一直用的jxl,改成poi太麻煩,工作量太大。不要告訴我改成poi

不行,jxl最新版為2.6.12仍然不支持xlsx。要不換poi,要不讓用戶自己轉xlsx格式為xls格式。

閱讀全文

與java生成excelxlsx相關的資料

熱點內容
表格批量更名找不到指定文件 瀏覽:869
js的elseif 瀏覽:584
3dmaxvray視頻教程 瀏覽:905
imgtool工具中文版 瀏覽:539
java幫助文件在哪裡 瀏覽:965
win10切換輸入語言 瀏覽:696
haier電視網路用不了怎麼辦 瀏覽:361
蘋果6手機id怎麼更改 瀏覽:179
米家掃地機器人下載什麼app 瀏覽:82
如何在編程貓代碼島20種樹 瀏覽:915
手機基礎信息存儲在哪個文件 瀏覽:726
如何查找手機備份文件 瀏覽:792
內存清理工具formac 瀏覽:323
iphone過濾騷擾電話 瀏覽:981
wap網路如何使用微信 瀏覽:699
手機迅雷應用盒子在哪個文件夾 瀏覽:351
windows8網路連接 瀏覽:442
怎麼快速增加qq群人數 瀏覽:919
錘子視頻播放器文件不存在 瀏覽:707
蘋果手機怎麼清理app緩存 瀏覽:682

友情鏈接