POI操作excel内存一直增大解决方法

合集下载

EXCEL数据过大后几种提速的办法

EXCEL数据过大后几种提速的办法

EXCEL数据过大后几种提速的办法,我试过可以解决一部分问题!现和大家分享一下.一个工作簿中,并没有多少数据,但文件却很大,运行速度较慢,有时几近无法忍受的地步。

针对这个问题,陆续也有不少朋友参与过讨论,也提出过一些解决方法,但还不完整。

现在我将比较完整地分析Excel工作簿体积膨胀的原因,以及常用的几种方法。

(建议读完全文,同时,强烈建议在按照本文所提到的一些方法进行操作之前要保留文件的备份)第一部分:如何给Excel工作簿减肥除了工作簿本身有宏病毒(关于如何识别宏病毒,本文的结束处有说明)外,有下列的几个原因可能导致工作簿异常膨胀一。

工作表中的格式过于复杂(如多种字体,多种颜色,条件格式等等)我们都知道,一个工作表有65536*256个单元格,这个非常大的一个范围。

我们在应用一些格式设置时,往往为了方便,直接在整行,或整列,或者在多行和多列中应用,这样其实是不妥当的。

我相信很少有人会用满整列,或者整行。

大量的没有用到的单元格被加上了一些格式后,Excel并不总是知道这个单元格是不需要用的,而往往在计算时会包括这些单元格。

另外,格式的多样性(包括字体,颜色等),势必是要造成Excel文件体积变大,这是不难理解的。

用尽量少的格式样式,如字体和颜色,毕竟Excel的优势不是在于文书,版面的展示(那是Word,PowerPoint等的强项)删除“空白”的单元格。

找到工作表中最右下角的单元格(请注意:除非你有自信,请不要过分依赖Excel 的"定位"=>"最后一个单元格"所给你的结果),我是说你可以手工找到这个单元格。

然后选中这个单元格右边所有的列,然后执行菜单命令:"编辑"=〉"清除"=〉"全部",接下来,选中这个单元格下面所有的行,同样执行菜单命令:"编辑"=〉"清除"=〉"全部",然后保存二。

EXCEL数据过大后几种提速的办法

EXCEL数据过大后几种提速的办法

EXCEL数据过大后几种提速的办法,我试过可以解决一部分问题!现和大家分享一下.一个工作簿中,并没有多少数据,但文件却很大,运行速度较慢,有时几近无法忍受的地步。

针对这个问题,陆续也有不少朋友参与过讨论,也提出过一些解决方法,但还不完整。

现在我将比较完整地分析Excel工作簿体积膨胀的原因,以及常用的几种方法。

(建议读完全文,同时,强烈建议在按照本文所提到的一些方法进行操作之前要保留文件的备份)第一部分:如何给Excel工作簿减肥除了工作簿本身有宏病毒(关于如何识别宏病毒,本文的结束处有说明)外,有下列的几个原因可能导致工作簿异常膨胀一。

工作表中的格式过于复杂(如多种字体,多种颜色,条件格式等等)我们都知道,一个工作表有65536*256个单元格,这个非常大的一个范围。

我们在应用一些格式设置时,往往为了方便,直接在整行,或整列,或者在多行和多列中应用,这样其实是不妥当的。

我相信很少有人会用满整列,或者整行。

大量的没有用到的单元格被加上了一些格式后,Excel并不总是知道这个单元格是不需要用的,而往往在计算时会包括这些单元格。

另外,格式的多样性(包括字体,颜色等),势必是要造成Excel文件体积变大,这是不难理解的。

用尽量少的格式样式,如字体和颜色,毕竟Excel的优势不是在于文书,版面的展示(那是Word,PowerPoint等的强项)删除“空白”的单元格。

找到工作表中最右下角的单元格(请注意:除非你有自信,请不要过分依赖Excel 的"定位"=>"最后一个单元格"所给你的结果),我是说你可以手工找到这个单元格。

然后选中这个单元格右边所有的列,然后执行菜单命令:"编辑"=〉"清除"=〉"全部",接下来,选中这个单元格下面所有的行,同样执行菜单命令:"编辑"=〉"清除"=〉"全部",然后保存二。

poi导出excel数据量过大

poi导出excel数据量过大

poi导出excel数据量过⼤问题:使⽤poi导出excel,数据量过⼤导致内存溢出解决思路:1、多sheet导出 2、⽣成多个excel打包下载 3、⽣成csv下载本⽂使⽤的是第⼆个思路,代码如下:poiUtil⼯具类package com.rratchet.scala.ms.util;import ermodel.*;import javax.servlet.http.HttpServletResponse;import java.io.*;import ermodel.HorizontalAlignment;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/*** poi 公⽤⽅法*/public class PoiUtil {/*** 导出excel* @param sheetName* @param title* @param values* @param response* @param fileName* @param charsetName*/public static void exportExcel(String sheetName, String []title, String [][]values, HttpServletResponse response, String fileName,String charsetName){ // 第⼀步,创建⼀个HSSFWorkbook,对应⼀个Excel⽂件HSSFWorkbook wb= new HSSFWorkbook();createContent( wb,sheetName,title,values);//响应到客户端try {fileName = new String(fileName.getBytes(charsetName),"ISO8859-1");response.setContentType("application/octet-stream;charset="+charsetName);response.setHeader("Content-Disposition", "attachment;filename="+ fileName);response.addHeader("Pargam", "no-cache");response.addHeader("Cache-Control", "no-cache");OutputStream os = response.getOutputStream();wb.write(os);os.flush();os.close();} catch (Exception e) {e.printStackTrace();}}/*** 创建excel* @param sheetName sheet名* @param title 标题* @param values 内容* @param fileName ⽂件名* @param filePath ⽂件地址* @return excel保存路径* @throws Exception*/public static String createExcel(String sheetName, String []title, String [][]values,String fileName,String filePath){String resultPath=filePath+"/"+fileName;// 第⼀步,创建⼀个HSSFWorkbook,对应⼀个Excel⽂件HSSFWorkbook wb= new HSSFWorkbook();createContent( wb,sheetName,title,values);//判断是否存在⽬录. 不存在则创建isChartPathExist(filePath);//创建Excel⽂件isFileExist(filePath+"/"+fileName);try{FileOutputStream output=new FileOutputStream(filePath+"/"+fileName);wb.write(output);//写⼊磁盘output.close();}catch (Exception e){resultPath="";e.printStackTrace();}return resultPath;}/*** 创建excel内容* @param wb* @param sheetName* @param title* @param values*/private static void createContent(HSSFWorkbook wb, String sheetName, String []title, String [][]values){ // 第⼆步,在workbook中添加⼀个sheet,对应Excel⽂件中的sheetHSSFSheet sheet = wb.createSheet(sheetName);// 第三步,在sheet中添加表头第0⾏,注意⽼版本poi对Excel的⾏数列数有限制HSSFRow row = sheet.createRow(0);// 第四步,创建单元格,并设置值表头设置表头居中HSSFCellStyle style = wb.createCellStyle();// 创建⼀个居中格式style.setAlignment(HorizontalAlignment.CENTER);//声明列对象HSSFCell cell = null;//创建标题for(int i=0;i<title.length;i++){cell = row.createCell(i);cell.setCellValue(title[i]);cell.setCellStyle(style);}//创建内容for(int i=0;i<values.length;i++){row = sheet.createRow(i + 1);for(int j=0;j<values[i].length;j++){//将内容按顺序赋给对应的列对象row.createCell(j).setCellValue(values[i][j]);}}}/*** 判断⽂件夹是否存在,如果不存在则新建** @param dirPath ⽂件夹路径*/private static void isChartPathExist(String dirPath) {File file = new File(dirPath);if (!file.exists()) {file.mkdirs();}}/*** 判断⽂件是否存在,不存在则创建⽂件* @param dirPath*/public static void isFileExist(String dirPath){File file = new File(dirPath);if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}}}fileUtil⼯具类/*** 压缩⽂件(zip)* @param srcFiles* @param zippath* @throws Exception*/public static void Zip(List<File> srcFiles , String zippath)throws Exception {File file=new File(zippath);if(!file.exists()){file.createNewFile();}FileOutputStream out = new FileOutputStream(file);long start = System.currentTimeMillis();ZipOutputStream zos = null ;try {zos = new ZipOutputStream(out);for (File srcFile : srcFiles) {byte[] buf = new byte[4096 * 1024];zos.putNextEntry(new ZipEntry(srcFile.getName()));int len;FileInputStream in = new FileInputStream(srcFile);while ((len = in.read(buf)) != -1){zos.write(buf, 0, len);}zos.closeEntry();in.close();}long end = System.currentTimeMillis();System.out.println("压缩完成,耗时:" + (end - start) +" ms");} catch (Exception e) {throw new RuntimeException("zip error from ZipUtils",e);}finally{if(zos != null){try {zos.close();} catch (IOException e) {e.printStackTrace();}}}}/***获取路径下所有⽂件(递归遍历)* @param fileList* @param path* @throws Exception*/public static void getFiles(List<File>fileList, String path){try {File file = new File(path);if(file.isDirectory()){File []files = file.listFiles();for(File fileIndex:files){//如果这个⽂件是⽬录,则进⾏递归搜索if(fileIndex.isDirectory()){getFiles(fileList,fileIndex.getPath());}else {//如果⽂件是普通⽂件,则将⽂件句柄放⼊集合中fileList.add(fileIndex);}}}}catch (Exception e){e.printStackTrace();}}测试⽅法public static void main(String[] args) throws IOException {String filePath="D:/home/"+UUID.randomUUID().toString();String[] titles = {"上传时间", "连接时间"};for(int i=0;i<5;i++){String time = DateUtil.getDateyyyymmddFormat(new Date());//excel⽂件名String fileName = "连接记录_" + i + ".xls";//sheet名String sheetName = time;String[][] content = new String[20][2];for (int j = 0; j < 20; j++) {content[j][0] = "20190-05-29"+"_"+j;content[j][1] = "s"+j;}PoiUtil.createExcel(sheetName,titles, content, fileName, filePath); }List<File> list=new ArrayList<>();//递归获取⽂件夹下所有内容FileUtils.getFiles(list,filePath);try {FileUtils.Zip(list,"D:/home/测试.zip");//删除⽣成的excelFileUtils.deleteFolderAndFile(filePath); } catch (Exception e) {e.printStackTrace();}}。

EXCEL容量增大的原因及解决办法(补充常见OFFICE问题解决)

EXCEL容量增大的原因及解决办法(补充常见OFFICE问题解决)

EXCEL容量增大的原因及解决办法相信大家有时候会碰到过,一个EXCEL表格,本来只有几M。

经过日常输入数据,操作。

后面变成了几十M,甚至是几百M。

造成电脑的假死,操作慢,电脑反映慢的问题。

其实都是不正常的。

这边我就大家分享一下。

如何处理EXCEL容量增大。

首先排除病毒和软件问题(这个要注意)接下来就是操作引起的,某些用户由于操作习惯习惯ctrl+v进行复制,在复制的时候按了多次等操作也会导致这个情况。

一、工作表中有大量的细小图片对象造成文件增大,这是最常见的文件虚胖原因。

可能的原因:(1)从网页上复制内容直接粘帖到工作表中,而没有使用选择性粘帖(2)无意中点了绘图工具栏的直线或其他绘图对象,不知不觉中在文件中插入了小的直线或其他图形,由于很小,肉眼几乎无法看到,又通过单元格的复制产生了大量的小绘图对象(3)在工作表中插入了图片其他绘图对象,操作中又将其高度宽度设为0或很小的值,通过复制产生了大量的对象(4)在行或列的位置中插入了绘图对象,对象的属性为,大小位置随单元而变的(默认的),然后隐藏行或列,或设置行高或列宽为很小的值,从而使插入的对象不能看到(5)工作表中的对象设置了不可见属性(Visible=false)或对象的线条和填充色均设为与底色相同,使对象无法看到判断方法:(1)CTRL-G,定位,定位条件中选“对象”,确定后会显示很多被选择的小对象(这种方法在隐藏列或行中的对象并不能看到(2)用VBA对对象进行计数,看看有多少个对象在工作表中,与你的工作表中需要的对象数量是否相符Sub countshapes()Dim n n = ActiveSheet.Shapes.Count MsgBox "本工作表共有" & n & "个对象"End Sub解决办法(1)如果确认工作表中没有你需要的对象或控件,用CTRL-G,定位,定位条件中选“对象”,确定后按DEL键删除,会删除工作表中所有的对象然后保存看看容量是否变小(2)用VBA删除,可以根据需要删除高度或宽度小于一定值的小对象,如Sub delshapes()Dim sp As Shape, nFor Each sp In ActiveSheet.ShapesIf sp.Width < 14.25 Or sp.Height < 14.25 Then '约小于0.5cm,根据需要设定sp.Deleten = n + 1End IfNext spMsgBox "共删除了" & n & "个对象"End Sub二、工作表中在很大的范围内设置了单元格的格式或者条件格式可能的原因:操作时选择在很大的区域设置或复制了单元格的格式或条件格式(并不是整行整列),而真正用的区域并不很多,造成工作表内容不多,文件却很大。

excel文件过大解决方法

excel文件过大解决方法

excel文件过大解决方法excel文件过大解决方法早上同事发了一个excel过来给我,可是我怎么都打开不了,去她那里试着打开,也是比平常所用的excel慢很多。

后来上网查了一下,才找到解决的办法。

现和朋友们分享一下。

很多人在实际使用excel过程中发生excel文件不明原因的增大,打开计算都很缓慢的现象,有时甚至造成文件损坏,无法打开的情况,以下是我收集的造成文件虚增的原因及处理办法。

一、工作表里有隐藏的对象(往往过大的excel文件都是因为存在这些隐含对象才会变的非常大。

)可以通过excel中的编辑-->定位-->定位条件中的"对象"来清除掉excel中的一些隐含对象。

清除对象后问题解决。

这些隐含对象的来源就是一些程序输出的excel文件所造成的,就是说你不是通过微软的excel程序来建立的excel文档。

(如:从网页上复制内容直接粘帖到工作表中,并不是说不可已复制网页,你可以使用选择性粘帖。

)操作中又通过复制产生了大量的对象。

二、工作表中在很大的范围内设置了单元格的格式或者条件格式我们都知道,一个工作表有65536*256个单元格,这个非常大的一个范围。

我们在应用一些格式设置时,往往为了方便,直接在整行,或整列,或者在多行和多列中应用,这样其实是不妥当的。

我相信很少有人会用满整列,或者整行。

大量的没有用到的单元格被加上了一些格式后,excel并不总是知道这个单元格是不需要用的,而往往在计算时会包括这些单元格。

另外,格式的多样性(包括字体,颜色等),势必是要造成excel文件体积变大,这是不难理解的。

删除“空白”的单元格。

找到工作表中最右下角的单元格("定位"=>"最后一个单元格"),然后选中这个单元格右边所有的列,然后执行菜单命令:"编辑"=〉"清除"=〉"全部",接下来,选中这个单元格下面所有的行,同样执行菜单命令:"编辑"=〉"清除"=〉"全部",然后保存三、工作表中插入的图片格式影响文件的大小选择适当的图片格式,在文档中引用的图片格式一般有三种,bmp、jpg、gif。

npoi 内存占用

npoi 内存占用

npoi 内存占用在计算机程序开发和数据处理领域,内存占用一直是一个重要的指标。

NPOI作为一款.NET平台下的Excel文件读写库,其内存占用情况备受关注。

本文旨在深入探讨NPOI的内存占用问题,分析其原因,并提出优化的方法。

一、NPOI内存占用情况分析NPOI在读写Excel文件时,需要将文件加载到内存中进行处理。

针对大型Excel文件和复杂的数据操作,内存占用往往是一个较为关键的问题。

在正常情况下,NPOI会将Excel文件解析成一个数据模型,并将所有数据存储在内存中。

这样的设计可以提高处理速度,并方便对数据进行操作和修改。

然而,过多的数据存储也会导致内存占用过高的问题。

二、NPOI内存占用过高的原因1. 数据模型存储方式NPOI默认情况下将Excel文件的所有数据存储在内存中的一个数据模型中,这样的设计虽然便于操作,但是对于大型文件来说,内存占用会非常高。

2. 未及时释放资源NPOI在进行数据读写操作时,需要手动释放资源。

如果开发者没有适时地调用Dispose()或者Close()方法来释放相关资源,就会导致内存占用越来越高。

3. 数据缓存问题为了提高操作效率,NPOI在处理数据时会进行缓存。

但是如果缓存的数据量过大,并且没有及时释放,就会导致内存占用过高的问题。

三、优化内存占用方法针对NPOI内存占用过高的问题,可以通过以下方法进行优化:1. 适时释放资源在使用完NPOI进行数据读写操作后,一定要适时地调用Dispose()或者Close()方法来释放资源,特别是对于大型Excel文件的处理,要格外注意。

2. 分页加载数据对于大型Excel文件,可以采取分页加载数据的方式。

即每次只加载一部分数据进行处理,处理完毕后再加载下一部分数据,这样可以有效减少内存占用。

3. 针对性地缓存数据在设计数据缓存时,可以根据实际需求对数据进行针对性的缓存。

只缓存必要的数据,而不是将整个Excel文件的所有数据都存储在内存中。

Excel表格文件体积过大怎么解决

Excel表格文件体积过大怎么解决

Excel表格文件体积过大怎么解决
推荐文章
excel2007表格中标签页不见了的解决方法是什么热度:excel 表格数据公式不生效如何解决热度:excel表格提示不能更改数组如何解决热度: Excel表格中插入图片图表的按钮呈灰色怎么解决热度:Excel表格超链接不能打开的解决方法热度:
Excel中的表格如果内存过大会导致打开慢,表格内存大具体该如何解决呢?下面是由店铺分享的excel表格内存过大的解决方案,欢迎大家来到学习。

excel表格内存过大的解决方法
内存过大解决步骤1:打开内存过大EXCEL文件,可能时间会较长
内存过大解决步骤2:快捷键Ctrl+G ,出现对话框,点定位条件,然后确定,出现如图对话框
内存过大解决步骤3:点对话框内的对象,就会出现如图小虚框,Delete 删掉小框
内存过大解决步骤4:再Ctrl+S 保存即可,这里打开此文件就会快了,内存也会变小很多。

excel表格内存虚大的解决方法

excel表格内存虚大的解决方法

很多人在实际‎使用EXCE‎L过程中发生‎E XCEL文‎件不明原因的‎增大,打开计算都很‎缓慢的现象,有时甚至造成‎文件损坏,无法打开的情‎况,以下是我收集‎的造成文件虚‎增的原因及处‎理办法,对没有提到的‎其他情况和解‎决办法,欢迎大家给予‎补充:一、工作表中有大‎量的细小图片‎对象造成文件‎增大,这是最常见的‎文件虚胖原因‎。

可能的原因:(1)从网页上复制‎内容直接粘帖‎到工作表中,而没有使用选‎择性粘帖,(2)无意中点了绘‎图工具栏的直‎线或其他绘图‎对象,不知不觉中在‎文件中插入了‎小的直线或其‎他图形,由于很小,肉眼几乎无法‎看到,又通过单元格‎的复制产生了‎大量的小绘图‎对象(3)在工作表中插‎入了图片其他‎绘图对象,操作中又将其‎高度宽度设为‎0或很小的值‎,通过复制产生‎了大量的对象‎(4)在行或列的位‎置中插入了绘‎图对象,对象的属性为‎,大小位置随单‎元而变的(默认的),然后隐藏行或‎列,或设置行高或‎列宽为很小的‎值,从而使插入的‎对象不能看到‎(5)工作表中的对‎象设置了不可‎见属性(V isibl‎e=false)或对象的线条‎和填充色均设‎为与底色相同‎,使对象无法看‎到判断方法:(1)编辑→定位(快捷键:F5或Ctr‎l-G),定位条件中选‎“对象”,确定后会显示‎很多被选择的‎小对象(这种方法在隐‎藏列或行中的‎对象并不能看‎到)(2)用VBA对对‎象进行计数,看看有多少个‎对象在工作表‎中,与你的工作表‎中需要的对象‎数量是否相符‎Sub counts‎h apes() Dim n n = Active‎S heet.Shapes‎.Count MsgBox‎"本工作表共有‎" & n & "个对象" End Sub解决办法(1)如果确认工作‎表中没有你需‎要的对象或控‎件,用CTRL-G,定位,定位条件中选‎“对象”,确定后按DE‎L键删除,会删除工作表‎中所有的对象‎(2)用VBA删除‎,可以根据需要‎删除高度或宽‎度小于一定值‎的小对象,如Sub delsha‎p es() Dim sp As Shape, n For Each sp In Active‎S heet.Shapes‎If sp.Width < 14.25 Or sp.Height‎< 14.25 Then '约小于0.5cm,根据需要设定‎sp.Delete‎n = n + 1 End If Next sp MsgBox‎"共删除了" & n & "个对象" End Sub二、工作表中在很‎大的范围内设‎置了单元格的‎格式或者条件‎格式可能的原因:操作时选择在‎很大的区域设‎置或复制了单‎元格的格式或‎条件格式(并不是整行整‎列),而真正用的区‎域并不很多,造成工作表内‎容不多,文件却很大。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

POI操作ExcelPOI操作Excel 内存一直增大直至溢出问题主要是针对写入内容操作.xlsx格式遇到问题:如果反复操作模板文件往工作表中写入数据会出现文件内存一直增大问题多次操作的话直至内存溢出。

(1)首先要配置myEclipse ------->run----->run Configurations----->Java Application ----对其下要用到的类进行配置---->Arguments在VM arguments 下写入-Xms512m -Xmx1048m -XX:PermSize=128m -XX:MaxPermSize=400m-Dcom.sun.management.jmxremote=true 点击apply 然后确定(2)这里根据能想到的方法进行了多次测试:<1>多次下载数据写入sheet1 每次写入数据之前清空sheet1中的所有行内容,之后再写入新数据即每次操作都是对sheet1的更新;能够清空内容但是内存大小还会一直增大初步认为是内容清空了行所占的占位符还在那表面是空了但是真实的大小还是存在,暂没有解决此问题示例代码/*for(int i = 0;;i++){XSSFRow row = sheet.getRow(i);if(row != null){sheet.removeRow(row);}else{break;}}*/<2>多次下载数据写入sheet1 每次写入前对工作区的工作表进行删除操作,删除sheet1 ,然后在新建sheet1,写入数据,确保每次数据都是最新暂没有解决此问题示例代码public void deleteSheet(String targetFile,String sheetName) {try {FileInputStream fis = new FileInputStream(targetFile);HSSFWorkbook wb = new HSSFWorkbook(fis);//删除Sheetwb.removeSheetAt(wb.getSheetIndex(sheetName));this.fileWrite(targetFile, wb);fis.close();} catch (Exception e) {e.printStackTrace();}}//新建public static void newSheet1(String filePath,String sheetName) throws Exception{ try {System.out.println("然后走的这里新建sheet1+++++++++++++++++++++++++++++");FileInputStream fis = new FileInputStream(filePath);XSSFWorkbook workbook2003 = new XSSFWorkbook(fis);//newSheetworkbook2003.createSheet(sheetName);fileWrite(filePath,workbook2003);fis.close();} catch (Exception e) {e.printStackTrace();}}<3> 考虑到是内容格式问题,通过代码设置了行高大小,行高起到了作用,内存增大问题没有解决示例代码public static void newSheet1Hig(String filePath) throws Exception{try {System.out.println("最后走的这里新设置sheet1的行高+++++++++++++++++++++++++++++");FileInputStream fis = new FileInputStream(filePath);XSSFWorkbook workbook2003 = new XSSFWorkbook(fis);XSSFSheet sheet = workbook2003.getSheet("Sheet1");int num=workbook2003.getSheet("Sheet1").getLastRowNum();System.out.println("行的值***********"+num);int hight=15*20;for (int i = 0; i < num; i++) {//System.out.println("行========================="+i);//System.out.println(sheet.getRow(i).getCell(0)+"\t"+sheet.getRow(i).getCell(1));sheet.getRow(i).setHeight((short)hight);}fileWrite(filePath,workbook2003);fis.close();} catch (Exception e) {e.printStackTrace();}}关闭流操作代码示例public static void fileWrite(String filePath,XSSFWorkbook wb) throws Exception{ FileOutputStream fileOut = new FileOutputStream(filePath);wb.write(fileOut);fileOut.flush();fileOut.close();}以上三种测试方法都是考虑到了流机制对数据的写入操作考虑到下载内容大小的问题其中拿多内容地址下载和少内容地址下载数据进行比较测试次数:循环100次(1)大内容:比如天猫网站上左旋肉碱的列表页数据 (60产品信息)反复测试内存一直增大增大幅度在没执行一次内存扩大约10k 直至几兆……(2)小内容:比如天猫网站上左旋肉碱的单个产品详情页反复测试内存大小变化基本可控前后10k左右变化基本不增长其中遇见这样一问题下载好数据后整个程序流程走完打开表格如果第一次去随意操作更改行高值或者其他小更改之后保存操作现在去看文件大小会发现现在的值会变成文件真实的大小比如说200k的文件反复执行后变成了2兆那么按这个操作后又变成了200k左右只是程序没能控制需要手动去操作模板文件像(2)小内容本身文件小的话第一次生成的数据可能会比真实模板文件要小如果再按那种方式去手动改变下表格中的值后保存会恢复真实的大小如:真实的文件180k 程序执行后变成160k左右经手动操作恢复真实大小180k左右像这两类情况如果用程序操作工作表格式没有生效手动去操作excel 文件的话反而恢复到了真实的文件大小考虑是格式问题有可能跟excel自身有关系以下内容是说Excel 自身问题第五点需注意EXCEL运行缓慢很多人在实际使用EXCEL过程中发生EXCEL文件不明原因的增大,打开计算都很缓慢的现象,有时甚至造成文件损坏,无法打开的情况,以下是我收集的造成文件虚增的原因及处理办法,对没有提到的其他情况和解决办法,欢迎大家给予补充:一、工作表中有大量的细小图片对象造成文件增大,这是最常见的文件虚胖原因。

可能的原因:(1)从网页上复制内容直接粘帖到工作表中,而没有使用选择性粘帖,(2)无意中点了绘图工具栏的直线或其他绘图对象,不知不觉中在文件中插入了小的直线或其他图形,由于很小,肉眼几乎无法看到,又通过单元格的复制产生了大量的小绘图对象(3)在工作表中插入了图片其他绘图对象,操作中又将其高度宽度设为0或很小的值,通过复制产生了大量的对象(4)在行或列的位置中插入了绘图对象,对象的属性为,大小位置随单元而变的(默认的),然后隐藏行或列,或设置行高或列宽为很小的值,从而使插入的对象不能看到(5)工作表中的对象设置了不可见属性(Visible=false)或对象的线条和填充色均设为与底色相同,使对象无法看到判断方法:(1)CTRL-G,定位,定位条件中选“对象”,确定后会显示很多被选择的小对象(这种方法在隐藏列或行中的对象并不能看到)(2)用VBA对对象进行计数,看看有多少个对象在工作表中,与你的工作表中需要的对象数量是否相符Sub countshapes() Dim n n = ActiveSheet.Shapes.Count MsgBox "本工作表共有" & n & "个对象" End Sub解决办法(1)如果确认工作表中没有你需要的对象或控件,用CTRL-G,定位,定位条件中选“对象”,确定后按DEL键删除,会删除工作表中所有的对象(2)用VBA删除,可以根据需要删除高度或宽度小于一定值的小对象,如Sub delshapes() Dim sp As Shape, n For Each sp In ActiveSheet.Shapes If sp.Width < 14.25 Or sp.Height < 14.25 Then '约小于0.5cm,根据需要设定 sp.Delete n = n + 1 End If Next sp MsgBox "共删除了" & n & "个对象" End Sub二、工作表中在很大的范围内设置了单元格的格式或者条件格式可能的原因:操作时选择在很大的区域设置或复制了单元格的格式或条件格式(并不是整行整列),而真正用的区域并不很多,造成工作表内容不多,文件却很大。

判断方法:工作表滚协条的拖动滑标很小,拖动滑标向下可以达到很大的行号或列标,滑标拖到最下或最右的位置显示的列标或行号就是实际设置了单元格格式的地址解决办法: 1、定位真正需要的行号下一行,按CTRL+SHIFT+下箭头,选择所有的多余行(也可以在名称框中输入行号如:2000:65536),编辑-清除-格式(或全部),同理清除可清除多余列的格式 2、如果需要在一行或一列的很大范围设置统一的单元格格式,可以选择整行或整列设置单元格格式,而不要只选择行列的一部分单独设置格式,再根据需要对行列的个别单元格设置单独的格式,对整行或整列甚至整个工作表设置单元格格式并不会造成文件虚增的问题,对A1:A65536设置单元格格式与对A1:A65535设置单元格格式文件太小是完全不同的 3、如果欲对已设置的不同格式的单元格设置整列或整行统一的格式,应选整行或整列,先清除单元格的格式或将单元格格式设为常规,再对整行或整列设置其他的单元格格式,直接设置有时可能并不能使文件减肥 4、对条件格式也可用编辑-定位,定位条件中选“条件格式”,然后在格式-条件格式中删除条件格式三、为很大的区域设置了数据有效性形成原因:与第二项基本相同,选择很大的区域设置了数据有效性,或将有有效性设置的单元格复制到很大的区域,尤其是在有效性设置中进行了“输入法”“输入信息”“出错警告”的设置,更具有隐蔽性,一般不易发现。

相关文档
最新文档