導航:首頁 > 版本升級 > javaxssfworkbook寫文件

javaxssfworkbook寫文件

發布時間:2023-01-08 01:38:06

⑴ 為什麼用XSSFWorkbook寫出的數據excel不顯示

程序太多,看不過來,下面是我們系統裡面的能正常使用的代碼,你參考一下,看看能不能幫到你。

public static List<String[]> getXSSFResult(Workbook wb, int ignoreRows) {
List<String[]> result = new ArrayList<String[]>();
XSSFCell cell = null;
int rowSize = 0;
for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
XSSFSheet st = (XSSFSheet) wb.getSheetAt(sheetIndex);
// 第一行為標題,不取
for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
XSSFRow row = st.getRow(rowIndex);
if (row == null) {
continue;
}
int tempRowSize = row.getLastCellNum() + 1;
if (tempRowSize > rowSize) {
rowSize = tempRowSize;
}
String[] values = new String[rowSize];
Arrays.fill(values, "");
boolean hasValue = false;
for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
String value = "";
cell = row.getCell(columnIndex);
if (cell != null) {
// 注意:一定要設成這個,否則可能會出現亂碼
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_FORMULA:
// 導入時如果為公式生成的數據則無值
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue();
} else {
value = cell.getNumericCellValue() + "";
}
break;
case XSSFCell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
value = new SimpleDateFormat("yyyy/MM/dd")
.format(date);
} else {
value = "";
}
} else {
value = new DecimalFormat("0").format(cell
.getNumericCellValue());
}
break;
case XSSFCell.CELL_TYPE_BLANK:
break;
case XSSFCell.CELL_TYPE_ERROR:
value = "";
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y"
: "N");
break;
default:
value = "";
}
}
if (columnIndex == 0 && value.trim().equals("")) {
break;
}
values[columnIndex] = rightTrim(value);
hasValue = true;
}
if (hasValue) {
result.add(values);
}
}
}
return result;
}

@SuppressWarnings("deprecation")
public static List<String[]> getHSSFResult(Workbook wb, int ignoreRows)
{
List<String[]> result = new ArrayList<String[]>();
HSSFCell cell = null;
int rowSize = 0;
for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++)
{
HSSFSheet st = (HSSFSheet) wb.getSheetAt(sheetIndex);
// 第一行為標題,不取
for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++)
{
HSSFRow row = st.getRow(rowIndex);
if (row == null)
{
continue;
}
int tempRowSize = row.getLastCellNum() + 1;
if (tempRowSize > rowSize)
{
rowSize = tempRowSize;
}
String[] values = new String[rowSize];
Arrays.fill(values, "");
boolean hasValue = false;
for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++)
{
String value = "";
cell = row.getCell(columnIndex);
if (cell != null)
{

// 注意:一定要設成這個,否則可能會出現亂碼

// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
switch (cell.getCellType())
{
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell))
{
Date date = cell.getDateCellValue();
if (date != null)
{
value = new SimpleDateFormat("yyyy-MM-dd")
.format(date);
} else
{
value = "";
}
} else
{
value = new DecimalFormat("0").format(cell
.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
// 導入時如果為公式生成的數據則無值
if (!cell.getStringCellValue().equals(""))
{
value = cell.getStringCellValue();
} else
{
value = cell.getNumericCellValue() + "";
}
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_ERROR:
value = "";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y"
: "N");
break;
default:
value = "";
}
}
if (columnIndex == 0 && value.trim().equals(""))
{
break;
}
values[columnIndex] = rightTrim(value);
hasValue = true;
}
if (hasValue)
{
result.add(values);
}
}
}
return result;
}

java生成excel設置列寬,漢字問題

貌似只能大概猜測。因為英文的字元不是等寬的,另外也和font-size, font-family有關。

如果是12號字體,一個漢字的寬度應該是12像素,一個字母應該大致是6像素。
你還需要將1像素轉化為1excel單元格的寬度單位。

⑶ 《JAVA》編程中怎麼用SXSSFWorkbook對已存在的excel操作進行寫數據操作

XSSFWorkbook wb=new XSSFWorkbook(參數);中的參數是InputStream ,你直接XSSFWorkbook wb=new XSSFWorkbook(fs);就可以了。

⑷ 想請教下,java poi怎麼實現讀取多個表格的第一列數據,然後寫進一張新表裡,麻煩了~

一張表多個sheet頁的情況:

  1. 生成workbook:

    XSSFWorkbook workBook = new XSSFWorkbook(new FileInputStream(filePath))

  2. 獲取workbook的所有sheet頁:

    for (int i = 0; i < workBook.getNumberOfSheets(); i++) {

    XSSFSheet sheet = workBook.getSheetAt(i);

    }

  3. 讀取每個sheet頁的第一行:

    XSSFRow row = sheet.getRow(0);

如果是是多個excel,則把路徑放一個list裡面,遍歷讀每個excel就好了

⑸ java excel一般怎樣導入oracel資料庫

用到的JAR包如下(可以直接到POI官網上下載下載):
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
xmlbeans-2.3.0.jar

可能有沖突的JAR包,如果工程lib中存在,需要刪除。
xbean-2.1.0.jar

具體代碼如下:
Java代碼
package com.yusj;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
* 導入和導出Excel文件
* 支持2003(xls)和2007(xlsx)版本的Excel文件
*
* @author yxm
*/
public class OperationExcelForPOI {

public static void main(String[] args) {
// 文件所在路徑
String execelFile = "C:/Book2007.xlsx" ;
//String execelFile = "C:/Book2003.xls" ;
// 導入Excel
new OperationExcelForPOI().impExcel(execelFile) ;
// 導出Excel
String expFilePath = "C:/testBook.xls" ;
new OperationExcelForPOI().expExcel(expFilePath);
}

/**
* 導入Excel
* @param execelFile
*/
public void impExcel(String execelFile){
try {
// 構造 Workbook 對象,execelFile 是傳入文件路徑(獲得Excel工作區)
Workbook book = null;
try {
// Excel 2007獲取方法
book = new XSSFWorkbook(new FileInputStream(execelFile));
} catch (Exception ex) {
// Excel 2003獲取方法
book = new HSSFWorkbook(new FileInputStream(execelFile));
}

// 讀取表格的第一個sheet頁
Sheet sheet = book.getSheetAt(0);
// 定義 row、cell
Row row;
String cell;
// 總共有多少行,從0開始
int totalRows = sheet.getLastRowNum() ;
// 循環輸出表格中的內容,首先循環取出行,再根據行循環取出列
for (int i = 1; i <= totalRows; i++) {
row = sheet.getRow(i);
// 處理空行
if(row == null){
continue ;
}
// 總共有多少列,從0開始
int totalCells = row.getLastCellNum() ;
for (int j = row.getFirstCellNum(); j < totalCells; j++) {
// 處理空列
if(row.getCell(j) == null){
continue ;
}
// 通過 row.getCell(j).toString() 獲取單元格內容
cell = row.getCell(j).toString();
System.out.print(cell + "\t");
}
System.out.println("");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void expExcel(String expFilePath){
OutputStream os = null ;
Workbook book = null;
try {
// 輸出流
os = new FileOutputStream(expFilePath);
// 創建工作區(97-2003)
book = new HSSFWorkbook();
// 創建第一個sheet頁
Sheet sheet= book.createSheet("test");
// 生成第一行
Row row = sheet.createRow(0);
// 給第一行的第一列賦值
row.createCell(0).setCellValue("column1");
// 給第一行的第二列賦值
row.createCell(1).setCellValue("column2");
// 寫文件
book.write(os);

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 關閉輸出流
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
}

⑹ java中怎麼將oracle數據導出到excel

用到的JAR包如下:
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
xmlbeans-2.3.0.jar

可能有沖突的JAR包,如果工程lib中存在,需要刪除。
xbean-2.1.0.jar

具體代碼如下:
Java代碼
package com.yusj;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
* 導入和導出Excel文件類
* 支持2003(xls)和2007(xlsx)版本的Excel文件
*
* @author yxm
*/
public class OperationExcelForPOI {

public static void main(String[] args) {
// 文件所在路徑
String execelFile = "C:/Book2007.xlsx" ;
//String execelFile = "C:/Book2003.xls" ;
// 導入Excel
new OperationExcelForPOI().impExcel(execelFile) ;
// 導出Excel
String expFilePath = "C:/testBook.xls" ;
new OperationExcelForPOI().expExcel(expFilePath);
}

/**
* 導入Excel
* @param execelFile
*/
public void impExcel(String execelFile){
try {
// 構造 Workbook 對象,execelFile 是傳入文件路徑(獲得Excel工作區)
Workbook book = null;
try {
// Excel 2007獲取方法
book = new XSSFWorkbook(new FileInputStream(execelFile));
} catch (Exception ex) {
// Excel 2003獲取方法
book = new HSSFWorkbook(new FileInputStream(execelFile));
}

// 讀取表格的第一個sheet頁
Sheet sheet = book.getSheetAt(0);
// 定義 row、cell
Row row;
String cell;
// 總共有多少行,從0開始
int totalRows = sheet.getLastRowNum() ;
// 循環輸出表格中的內容,首先循環取出行,再根據行循環取出列
for (int i = 1; i <= totalRows; i++) {
row = sheet.getRow(i);
// 處理空行
if(row == null){
continue ;
}
// 總共有多少列,從0開始
int totalCells = row.getLastCellNum() ;
for (int j = row.getFirstCellNum(); j < totalCells; j++) {
// 處理空列
if(row.getCell(j) == null){
continue ;
}
// 通過 row.getCell(j).toString() 獲取單元格內容
cell = row.getCell(j).toString();
System.out.print(cell + "\t");
}
System.out.println("");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void expExcel(String expFilePath){
OutputStream os = null ;
Workbook book = null;
try {
// 輸出流
os = new FileOutputStream(expFilePath);
// 創建工作區(97-2003)
book = new HSSFWorkbook();
// 創建第一個sheet頁
Sheet sheet= book.createSheet("test");
// 生成第一行
Row row = sheet.createRow(0);
// 給第一行的第一列賦值
row.createCell(0).setCellValue("column1");
// 給第一行的第二列賦值
row.createCell(1).setCellValue("column2");
// 寫文件
book.write(os);

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 關閉輸出流
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
}

⑺ java把HSSF全部替換成XSSF,然後來寫excel2007報錯

首先:確定jar包是否已經導入

其次看jdk版本是否大於1.6.0_18,若沒有,則會在newXSSFWorkbook()時報錯

⑻ 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 poi Excel2007里的SXSSFWorkbook怎樣讀取文件 SXSSFWorkbook只能寫嗎,那怎樣獲得要寫的內容

Notes是一個具有Id , RuleID , MainId 屬性的javaBean.

public static List<Notes> readFromXLS2007(String filePath) {
File excelFile = null;// Excel文件對象
InputStream is = null;// 輸入流對象
String cellStr = null;// 單元格,最終按字元串處理
List<Notes> NotesList = new ArrayList<Notes>();// 返回封裝數據的List
Notes Notes = null;// 每一個Notes對象
try {
excelFile = new File(filePath);
is = new FileInputStream(excelFile);// 獲取文件輸入流
XSSFWorkbook workbook2007 = new XSSFWorkbook(is);// 創建Excel2007文件對象
XSSFSheet sheet = workbook2007.getSheetAt(0);// 取出第一個工作表,索引是0
// 開始循環遍歷行,表頭不處理,從1開始
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Notes = new Notes();// 實例化Notes對象
XSSFRow row = sheet.getRow(i);// 獲取行對象
if (row == null) {// 如果為空,不處理
continue;
}
// 循環遍歷單元格
for (int j = 0; j < row.getLastCellNum(); j++) {
XSSFCell cell = row.getCell(j);// 獲取單元格對象
if (cell == null) {// 單元格為空設置cellStr為空串
cellStr = "";
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {// 對布爾值的處理
cellStr = String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {// 對數字值的處理
cellStr = cell.getNumericCellValue() + "";
} else {// 其餘按照字元串處理
cellStr = cell.getStringCellValue();
}
// 下面按照數據出現位置封裝到bean中
if (j == 0) {
Notes.setId(new Double(cellStr).intValue());
} else if (j == 1) {
Notes.setRuleId(new Double(cellStr).intValue());
} else if (j == 2) {
Notes.setMainId(new Double(cellStr).intValue());
}
}
NotesList.add(Notes);// 數據裝入List
}
} catch (IOException e) {
e.printStackTrace();
} finally {// 關閉文件流
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return NotesList;
}
}

閱讀全文

與javaxssfworkbook寫文件相關的資料

熱點內容
javachar與運算 瀏覽:347
如何在cad文件中插入源泉插件 瀏覽:362
存儲路徑無許可權或文件名不合規 瀏覽:496
iphone4s怎麼刪除文件 瀏覽:545
中公教師文件名叫什麼 瀏覽:844
word2010怎麼從任意頁設置頁碼 瀏覽:622
cass怎麼校正數據 瀏覽:612
linux查看所有管理員 瀏覽:2
u盤文件解壓縮失敗如何修復 瀏覽:566
黑蘋果怎麼顯卡才4m 瀏覽:270
方程式0day圖形化工具 瀏覽:961
電腦裝文件很慢 瀏覽:958
網路標號怎麼用 瀏覽:352
會議上文件讀好後要說什麼 瀏覽:783
安裝壓縮文件office 瀏覽:417
2014年網路營銷大事件 瀏覽:186
首頁全屏安裝代碼 瀏覽:39
黨規黨紀指的哪些文件 瀏覽:995
windows編程圖形界面用什麼設置 瀏覽:266
deb文件安裝路徑 瀏覽:540

友情鏈接