phpexcel导出内存溢出(php导出excel数据量大)

Excel表格网 2022-12-06 14:21 编辑:admin 94阅读

1. php导出excel数据量大

1 phpoffice/phpexcel已经弃用了,现在官方推荐使用phpoffice/phpspreadsheet

2 使用PHPexcel 导入excel文件与是哪个版本的THINKPHP没有关系, 甚至是与使用啥框架都没有关系

3 如果框架支持composer,可以直接通过composer引入PHPexcel ,然后直接 use 之后 就可以直接使用。

4 如果框架不支持composer, 也可以直接 require和include PHPExcel/Classes/PHPExcel.php 文件,然后就可以用了

2. java导出excel内存溢出

1。通过jsp页面接收上传的excel文件到后台,2,后台使用java连接数据库3.将excel文件通过io文件控制流读入,然后使用jdbc写入到数据库

3. java导入excel内存溢出

首先你要明白导入文件步骤:

1.实例化excel读取对象

2.加载excel文件

全部加载

选择加载

3.读取excel文件

全部读取

逐行读取

以下你看看那个更加适应你

顺便列出几个其他语言导入Excel文件,希望对你有帮助

PHP导入Excel文件

java把Excel文件数据导入数据库

PHP实现导出Excel文件通用方法

JXL生成的excel文件+JAVA文件下载功能

Java通用的Excel文件生成工具类,支持生成文件和浏览器直接下载

java处理Excel文件---excel文件的创建,删除,写入,读取

Java读取Excel文件

jxl解析Excel文件

JXL操作Excel文件

java POI读取Excel文件

java使用poi读取excel文件代码示例

用jxl生成Excel文件

PHP验证码文件类

PHP 下载远程文件

PHP获取远程文件的大小

php压缩CSS文件

PHP强制下载文件

php读取csv文件类

php 简单ftp文件上传范例

一个php 生成zip文件的类

4. Excel 内存溢出

Workbook workbook = new SXSSFWorkbook(1000); poi有个机制 每次往内存中写1000条数据,这个1000你可以改的 尽量别大于10000条数据,写完1000条数据后再重新写,这样就不会内存溢出了。

5. easyexcel导出内存溢出

1、修改指定宽度

把鼠标放在表格上,左上角会出现一个十字图标,点击这个图标。

点击之后你会看到表格被全选,单击右键选择里面的表格属性。

在表格属性里尺寸的指定宽度修改小一点比如15厘米,点击确定,那么你会看到表格就变小了,不再超出文档范围。

2、自动调整

选中复制进来的整个表格,点击鼠标右键,在弹出的菜单中选择“自动调整”--“根据窗口调整表格”,设置后表格就会自动调整为可显示完全的代表。

3、固定列宽

选择整个表格,点击右键,在弹出菜单中点击“自动调整”--“固定列宽”,然后根据纸张大小来设置合适的表格大小。

4、Web版式视图

在顶部的菜单栏中,点击【视图】-【Web版式视图】,即可完全显示表格。

5、阅读视图

点击Word底部的【阅读视图】,可以更方便的查看Word内容。

6、Excel

Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。

7、Word

Microsoft Word是微软公司的一个文字处理器应用程序。它最初是由Richard Brodie为了运行DOS的IBM计算机而在1983年编写的。随后的版本可运行于Apple Macintosh, SCO UNIX,和Microsoft Windows,并成为了Microsoft Office的一部分。

6. poi写入excel内存溢出

首先要导入spring相关包,poi,和fileupload包,我是使用maven构建的。

一.导入excel

(1)使用spring上传文件

a.前台页面提交

<form name="excelImportForm" action="${pageContext.request.contextPath}/brand/importBrandSort" method="post" onsubmit="return checkImportPath();" enctype="multipart/form-data" id="excelImportForm">

<input type="hidden" name="ids" id="ids">

<div >

<div >

<label ><input id="excel_file" type="file" name="filename" accept="xls"/></label>

<div >

<input id="excel_button" type="submit" value="导入Excel"/>

</div>

</div>

</div>

<div >

<button type="button" data-dismiss="modal" onClick="uncheckBoxes();">取消</button>

</div>

b.后台spring的controller进行相关操作,这里主要讲的是使用spring上传文件,和读取文件信息。

使用spring上传文件之前,需要配置bean。

<bean id="multipartResolver" ></bean>@RequestMapping(value = "/importBrandSort", method = RequestMethod.POST)

public ModelAndView importBrandSort(@RequestParam("filename") MultipartFile file,

HttpServletRequest request,HttpServletResponse response) throws Exception {

String temp = request.getSession().getServletContext()

.getRealPath(File.separator)

+ "temp"; // 临时目录

File tempFile = new File(temp);

if (!tempFile.exists()) {

tempFile.mkdirs();

}

DiskFileUpload fu = new DiskFileUpload();

fu.setSizeMax(10 * 1024 * 1024); // 设置允许用户上传文件大小,单位:位

fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:位

fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

// 开始读取上传信息

//

int index = 0;

/* List fileItems = null;

try {

fileItems = fu.parseRequest(request);

}

catch (Exception e) {

e.printStackTrace();

}

Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件

FileItem fileItem = null;

while (iter.hasNext()) {

FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息

if (!item.isFormField()) {

fileItem = item;

// index++;

}

}

if (fileItem == null)

return null;

*/

if (file == null)

return null;

logger.info(file.getOriginalFilename());

String name = file.getOriginalFilename();// 获取上传文件名,包括路径

//name = name.substring(name.lastIndexOf("\\") + 1);// 从全路径中提取文件名

long size = file.getSize();

if ((name == null || name.equals("")) && size == 0)

return null;

InputStream in = file.getInputStream();

List<BrandMobileInfoEntity> BrandMobileInfos = brandService

.importBrandPeriodSort(in);

// 改为人工刷新缓存KeyContextManager.clearPeriodCacheData(new

// PeriodDimensions());// 清理所有缓存

int count = BrandMobileInfos.size();

String strAlertMsg ="";

if(count!=0){

strAlertMsg= "成功导入" + count + "条!";

}else {

strAlertMsg = "导入失败!";

}

logger.info(strAlertMsg);

//request.setAttribute("brandPeriodSortList", BrandMobileInfos);

//request.setAttribute("strAlertMsg", strAlertMsg);

request.getSession().setAttribute("msg",strAlertMsg);

return get(request, response);

//return null;

}

代码中的注释部分是如果不使用spring的方式,如何拿到提交过来的文件名(需要是要apache的一些工具包),其实使用spring的也是一样,只是已经做好了封装,方便我们写代码。

代码中的后半部分是读取完上传文文件的信息和对数据库进行更新之后,输出到前台页面的信息。

上述代码中: InputStream in = file.getInputStream();

List<BrandMobileInfoEntity> BrandMobileInfos = brandService

.importBrandPeriodSort(in);读取excel的信息。

(2)使用poi读取excel

a.更新数据库

@Override

public List<BrandMobileInfoEntity> importBrandPeriodSort(InputStream in) throws Exception {

List<BrandMobileInfoEntity> brandMobileInfos = readBrandPeriodSorXls(in);

for (BrandMobileInfoEntity brandMobileInfo : brandMobileInfos) {

mapper.updateByConditions(brandMobileInfo);

}

return brandMobileInfos;

}

这部分是sevice层的代码,用于读取excel信息之后更新数据库数据,我这里是使用mybatis。定义一个类BrandMobileInfoEntity,用与保存excel表每一行的信息,而List< BrandMobileInfoEntity > 则保存了全部信息,利用这些信息对数据库进行更新。

b.读取excel信息

private List<BrandMobileInfoEntity> readBrandPeriodSorXls(InputStream is)

throws IOException, ParseException {

HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

List<BrandMobileInfoEntity> brandMobileInfos = new ArrayList<BrandMobileInfoEntity>();

BrandMobileInfoEntity brandMobileInfo;

// 循环工作表Sheet

for (int numSheet = 0;

numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {

HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);

if (hssfSheet == null) {

continue;

}

// 循环行Row

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

brandMobileInfo = new BrandMobileInfoEntity();

HSSFRow hssfRow = hssfSheet.getRow(rowNum);

for (int i = 0; i < hssfRow.getLastCellNum(); i++) {

HSSFCell brandIdHSSFCell = hssfRow.getCell(i);

if (i == 0) {

brandMobileInfo.setBrandId(Integer

.parseInt(getCellValue(brandIdHSSFCell)));

} else if (i == 1) {

continue;

} else if (i == 2) {

brandMobileInfo.setMobileShowFrom(Integer.parseInt(getCellValue(brandIdHSSFCell)));

} else if (i == 3) {

brandMobileInfo.setMobileShowTo(Integer.parseInt(getCellValue(brandIdHSSFCell)));

} else if (i == 4) {

brandMobileInfo.setSellMarkValue(getCellValue(brandIdHSSFCell));

} else if (i == 5) {

brandMobileInfo.setWarehouse(getCellValue(brandIdHSSFCell));

} else if (i ==

7. excel导入内存溢出

材料/工具:Excel20101、选中单元格,点击鼠标右键,选中“设置单元格格式”

2、选择“对齐”,水平对齐选择“填充”选项3、完成后,超出单元格的文字就隐藏了,当鼠标双击单元格,显示所有的文本内容,占据其它单元格位置4、如果想让单元格的内容按单元格的宽度显示,可以设置自动换行。

5、选中要调整的单元格,右键,选择“设置单元格格式”

6、选择“对齐”,将“自动换行”打勾7、双击单元格,超出单元格宽度的文字就可以自动换行,以单元格宽度大小进行完整显示了。

8. 大数据导出Excel导致内存溢出的解决方案

Dim Ro1&, Co%, I%, Ra As Range 改成Dim Ro1&, Co%, I&, Ra As Range i由整型改为长整型,另外excel最大行数好像是65536吧,i如果超过65536,后面 Range("B" & I) 也会出错。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片