㈠ java 用jxls 模版導出2007excel的問題
導出xls就行了,這樣excel2003、2007、2010都可以打開編輯。
㈡ java導出excel
java導出Excel
java 代碼 /* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.axon.fable.sams.view.action; import java.io.IOException; import java.io.OutputStream; import java.util.List; import javax.serv ...
java導出Excel例舉方式
方法一:導出Excel數據的插件jexcelapi
程序實例如下:
public void exportClassroom(OutputStream os) throws PaikeException {
try {
WritableWorkbook wbook = Workbook.createWorkbook(os); //建立excel文件
WritableSheet wsheet = wbook.createSheet("教室信息表", 0); //工作表名稱
//設置Excel字體
WritableFont wfont = new WritableFont(WritableFont.ARIAL, 16,
WritableFont.BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK);
WritableCellFormat titleFormat = new WritableCellFormat(wfont);
String[] title = { "教室名", "容 量", "類 型", "其他說明" };
//設置Excel表頭
for (int i = 0; i < title.length; i++) {
Label excelTitle = new Label(i, 0, title[i], titleFormat);
wsheet.addCell(excelTitle);
}
int c = 1; //用於循環時Excel的行號
ClassroomService cs = new ClassroomService();
List list = cs.findAllClassroom(); //這個是從資料庫中取得要導出的數據
Iterator it = list.iterator();
while (it.hasNext()) {
ClassroomDTO crdto = (ClassroomDTO) it.next();
Label content1 = new Label(0, c, crdto.getRoomname());
Label content2 = new Label(1, c, crdto.getCapicity().toString());
Label content3 = new Label(2, c, crdto.getRoomTypeId()
.toString());
Label content4 = new Label(3, c, crdto.getRemark());
wsheet.addCell(content1);
wsheet.addCell(content2);
wsheet.addCell(content3);
wsheet.addCell(content4);
c++;
}
wbook.write(); //寫入文件
wbook.close();
os.close();
} catch (Exception e) {
throw new PaikeException("導出文件出錯");
}
}
方法二:直接用Java代碼實現導出Excel報表
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.axon.fable.sams.view.action;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.axon.fable.empolderpackage.out.OutJavaScript;
import com.axon.fable.empolderpackage.page.Pager;
import com.axon.fable.empolderpackage.string.MyPublic;
import com.axon.fable.sams.common.BaseAction;
import com.axon.fable.sams.exception.AppBusinessException;
import com.axon.fable.sams.exception.AppSystemException;
/**
* MyEclipse Struts
* Creation date: 06-28-2007
*
* XDoclet definition:
* @struts.action path="/axon" name="axonForm" input="/samspage/zm/axon.jsp" parameter="method" scope="request" validate="true"
* @struts.action-forward name="success" path="/samspage/zm/content.jsp"
*/
public class StshipoperationAction extends BaseAction {
/*
* Generated Methods
*/
private static Session session=null;
private static Transaction ts=null;
private static Query queryC=null;
private static Query queryR=null;
private static Query query=null;
private static List list=null;
private static Integer startRow;
private static Integer ncurrentPage;
private static Integer cell;
private static String property;
private static String sql;
private static String type;
private static String condition ;//是否導出當前頁
private static String currentPage;
private static String from ;
private static String pactdata;
private static String voyagename;
private static String voyageno;
private static String dwt ;
private static String hirefrom ;
private static String deliveryposion ;
private static String redeliveryposion ;
private static String sheepowner ;
private static String addr;
private static String addcomm;
private static String rent;
private static String fileName ;
private static OutputStream os;
@Override
public ActionForward findAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
return null;
}
@Override
public ActionForward findById(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
return null;
}
@Override
public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
return null;
}
public static String strNull(Object nullStr,String newStr,Integer cell){
if(nullStr==null||nullStr.equals("")){return newStr;}else{cell+=1;return nullStr+"";}
}
public static String getStr(String str,Integer cell){
if(str==null||str.trim().equals("")){return "";}else{cell+=1;return ","+str;}
}
public static String getExcelTile(String title){
if(title==null)
return "";
if(title.equals("modela.stsid"))
return "編號";
if(title.equals("modelc.pactdata"))
return "合同日期";
if(title.equals("modela.voyagename"))
return "航名";
if(title.equals("modela.voyageno"))
return "航次";
if(title.equals("modelc.dwt"))
return "DWT";
if(title.equals("modelc.hirefrom"))
return "受載期";
if(title.equals("modela.deliveryposion"))
return "交船地點";
if(title.equals("modela.redeliveryposion"))
return "還船地點";
if(title.equals("modelc.sheepowner"))
return "聯系人";
if(title.equals("modelc.addr"))
return "經紀人擁金";
if(title.equals("modelc.addcomm"))
return "ADD COMM";
if(title.equals("modelc.rent"))
return "租金";
return "";
}
public ActionForward exporVoyagesInfoToExcel(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
list=null;
startRow=0;
ncurrentPage=1;
cell=0;
type =request.getParameter("type");
condition =request.getParameter("condition");//是否導出當前頁
currentPage =request.getParameter("currentPage");
from =request.getParameter("from");
pactdata = request.getParameter("modelc.pactdata");
voyagename = request.getParameter("modela.voyagename");
voyageno = request.getParameter("modela.voyageno");
dwt = request.getParameter("modelc.dwt");
hirefrom = request.getParameter("modelc.hirefrom");
deliveryposion = request.getParameter("modela.deliveryposion");
redeliveryposion = request.getParameter("modela.redeliveryposion");
sheepowner = request.getParameter("modelc.sheepowner");
addr = request.getParameter("modelc.addr");
addcomm = request.getParameter("modelc.addcomm");
rent = request.getParameter("modelc.rent");
if(type!=null&&type.trim().equals("1")){
type ="已還船舶--費用未結清";
}else{
type ="已還船舶--費用已結清";
}
property =getStr(pactdata,cell)+getStr(voyagename,cell)+getStr(voyageno,cell)+getStr(dwt,cell)+getStr(hirefrom,cell)
+getStr(deliveryposion,cell)+getStr(redeliveryposion,cell)+getStr(sheepowner,cell)+getStr(addr,cell)+getStr(addcomm,cell)
+getStr(rent,cell);
property = property.substring(1);
String split[] = property.split(",");
// System.out.println("-----------------------------property:"+property);
if(currentPage!=null&&!currentPage.trim().equals("")){
ncurrentPage =Integer.parseInt(currentPage);
}else{
OutJavaScript.outString(response, "Sorry! Failed to get information of pager.");
return null;
}
try {
session =getServiceLocator().getBaseHibernateDAO().getSession();
sql ="select count(*) "+from;
query =session.createQuery(sql);
list = query.list();
for (int i = 0; i < list.size(); i++) {
totalSize =(Integer)list.get(i);
if(totalSize!=0){
pager =new Pager(ncurrentPage,totalSize);
}
}
query =getServiceLocator().getBaseHibernateDAO().getSession().createQuery("select " +property+from);
if(condition!=null&&condition.trim().equals("1")){//分頁數據
startRow = (ncurrentPage - 1)*pager.getPageSize();
query.setFirstResult(startRow);
query.setMaxResults(pager.getPageSize());
// System.out.println("---------------------------------------------------query:"+query);
}
list = query.list();
fileName = "shipInfo";
os = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition",
"attachment; filename=" +fileName + ".xls");
response.setContentType("application/msexcel");
jxl.write.WritableWorkbook wbook = Workbook.createWorkbook(os);
jxl.write.WritableSheet wsheet = wbook.createSheet("the first sheet", 0);
for (int i = 0; i < split.length; i++) {
jxl.write.Label wlabel0;
wlabel0 = new jxl.write.Label(i, 0, getExcelTile(split[i]));
wsheet.addCell(wlabel0);
}
jxl.write.Label wlabel1;
for(int i=0;i<list.size();i++) {
if(split.length==1){
Object strval = (Object) list.get(i);
String javaScript=""+MyPublic.toHtmlStr(strval==null?"":strval.toString().trim())+"";
wlabel1 = new jxl.write.Label(0, i+1,strval==null?"":strval.toString().trim() );
wsheet.addCell(wlabel1);
}else{
Object[] strval = (Object[]) list.get(i);
for(int j=0;j<strval.length;j++) {
String javaScript=""+MyPublic.toHtmlStr(strval[j]==null?"":strval[j].toString().trim())+"";
//System.out.println("===================script:"+javaScript);
wlabel1 = new jxl.write.Label(j, i+1,strval[j]==null?"":strval[j].toString().trim() );
wsheet.addCell(wlabel1);
}
}
}
wbook.write();
response.flushBuffer();
wbook.close();
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
OutJavaScript.outString(response, "Sorry! Export Excel exception.");
e.printStackTrace();
} catch (HibernateException e1) {
// TODO Auto-generated catch block
OutJavaScript.outString(response, "Sorry! Database exception.");
e1.printStackTrace();
} catch (AppSystemException e1) {
// TODO Auto-generated catch block
OutJavaScript.outString(response, "Sorry! System exception.");
e1.printStackTrace();
} catch (AppBusinessException e1) {
// TODO Auto-generated catch block
OutJavaScript.outString(response, "Sorry! Database exception.");
e1.printStackTrace();
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
OutJavaScript.outString(response, "Sorry! Export Excel exception.");
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
OutJavaScript.outString(response, "Sorry! Export Excel exception.");
e.printStackTrace();
}
return null;
}
@Override
public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
return null;
}
}
還有其他很多種 字數限制 無法一一舉例方式
㈢ 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導出數據到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>
如上既是JS的進階導出,操作簡單,容易上手
但有個弊端就是分頁的情況下,只能導出分頁出的數據,畢竟這就是導出HTML內TABLE有的東西,數據在資料庫或後台的也就無能為力,所以這個適合的是無分頁的TABLE導出
3. 額外說明
tableExport.js是gitHub上的hhurz大牛的一個開源項目,需要下載該JS的可以點擊鏈接進入gitHub下載或在我的網路網盤下載密碼:oafu
tableExport.js不僅僅是個導出Excel的JS,他還可以導出CSV、DOC、JSON、PDF、PNG、SQL、TSV、TXT、XLS (Excel 2000 HTML format)、XLSX (Excel 2007 Office Open XML format)、XML (Excel 2003 XML Spreadsheet format)、XML (Raw xml)多種格式,具體使用可以參考hhurz的使用介紹
本人在之前找了好幾個導出Excel的都有各種各樣的問題(亂碼,無響應,無樣式),這個是目前找到最好的一個了,能解決亂碼問題,能有樣式,非常強大
㈤ java POI導出 07 EXCEL的問題
如果你的jar包沒用錯的話,那你看下是不是你代碼里的方法用錯了呢。office的07版跟03版差別很大的。
㈥ 如何用JAVA導出Excel(使用POI)
// 創建臨時文件(excel為Workbook對象)
response.reset();
response.setContentType("application/download");
response.setHeader("Content-Disposition",
"attachment;filename=" + excel.getFileName());
excel.getExcel().write(response.getOutputStream());
response.flushBuffer();
㈦ java導出excel07 在tomcat上正常,在websphere上導出的excel打開出現問題
出現修復提示,你可能要看看你導出的是,xls還是xlsx,因為這個在poi中用的類不一樣,HSSFWorkbook()對應xls,而XSSFWorkbook()對應xlsx,所以你不能用混了,比如用XSSFWorkbook()來生成xls可能就會提示你修復。
㈧ 如何用java完成Excel快速的導入導出
導出
現在我們定義好對象了,如何導出Excel --ExcelExportUtil 這個導出工具類
public void testExportExcel_1() throws Exception {
ExportParams params = new ExportParams("0328課程表", "日期:2016-03-28", "六年一班");
Workbook workbook = ExcelExportUtil.exportExcel(params, CourseEntity.class,courseList);
FileOutputStream fos = new FileOutputStream("D:/excel/0328課程表.xls");
workbook.write(fos);
fos.close();
}
我們只要把我們定義好的對象的class傳進去,以及對象的集合,Easypoi就可以返回一個Excel的workbook了,同時Easypoi是兼容03版本office和07版本office,你要穿個參數指定下類型及可以了,是不是不是比我們自己寫代碼簡單多了,最少只需要2行代碼就可以完成我們的office操作了
導入
我們把導出寫完了,導入是不是很復雜呢,也不是,導入也是同樣簡單,定時實體和上面定義的方式一樣
導入是用導入工具類
ImportParams params = new ImportParams();
params.setHeadRows(2);
List<CourseEntity> list = ExcelImportUtil.importExcel(inputStream, CourseEntity.class, params);
定義下表頭的參數,然後把流傳入進去就可以得到我們的對象列表是不是so easy.趕快來使用吧
㈨ java怎麼導出excel表格
通過這個例子,演示以下如何用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();
}
}