Tag: 内存

Apache POI批量修改Excel文件

我正在运行一个修改大型Excel文件的Java应用程序。 而且我正在经历更新发生的时间。 对于每个单元,我正在运行基于更改的更新作为休闲 public boolean updateCellData(ColumnName, RowNum, Data){ FileInputStream fis = new FileInputStream(path); Workbook workbook = WorkbookFactory.create(fis); row = getRow(rowNum-1); if (row == null){ row = sheet.createRow(rowNum-1); } cell = row.getCell(colNum); if (cell == null){ cell = row.createCell(colNum); } cell.setCellValue(data); fileOut = new FileOutputStream(path); workbook.write(fileOut); fileOut.close(); } 有什么优化,我可以做我的代码?

VBA运行时错误7内存不足

这可能在这里,我错过了,只是让我知道。 运行我的macros后,我得到运行时错误7内存不足。 debugging完成后,在这一行: cell.Offset(0, 6).Value = Sheets("MakeRing_Maths").Range("N1").Value 该代码是为了运行经纬度机场列表,创build将被解释为圆的线段,并转换为.KML(由Google地球专业版读取)。 这里是其余的代码 – 我怎样才能清理这样的事情,以避免内存泄漏? 所有的答案赞赏,或指向其他职位。 我知道这是很多,所以一般的build议也欢迎! 谢谢! Sub PLANEMAN_Coords() Dim Latitude As Double Dim Longitude As Double Dim Bearing As Integer Dim LeftRight As Integer Dim RangeKM As Double Dim MinRange As Double For Each cell In [RangeRings_ENTER!B9:B5001] If cell.Value = "" Then GoTo EXITLOOP Else End If […]

当运行两次的macros内存不足

我是这个论坛的新手,但是现在我正在自学VBA在工作中使用,所以最近阅读了大量的post! 我目前遇到了一些我已经创build的代码的问题。 代码的目的是根据双击的单元格值自动筛选多个工作表,然后将这些过滤的结果复制到另一个“主报表”工作表。 问题是,它一次运行得很好,之后如果我再次运行它或者我的其他macros在工作簿中,会popup一个错误,要求我closures内存以释放内存! 我曾尝试运行一次macros,保存和closures工作簿(清除任何可能被caching),重新打开并运行,但同样的错误仍然存​​在。 我也尝试改变我的.select提示与.activatebuild议由: 运行VBA时如何避免内存不足 但是这似乎打破了我的代码…然后再次我可能刚刚实现它错了,因为我是一个VBA的noob位有人可以帮我优化我的代码,以防止这个? 我的代码如下: Private Sub Merge() With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom End With Selection.Merge End Sub ——————————————————————————————————————————————————- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True Application.ScreenUpdating = False Application.EnableEvents = False Sheets("Master Report").Cells.Delete 'clear old master report Column = Target.Column Row = […]

excel vba内存使用优化

当我执行我的macros时,我得到了“内存不足”的信息。 发布时间太长,但是有提示可以更好地控制Excel 2007中的内存使用情况吗? 摆脱对象或类似的东西。 我不知道该怎么做 最好的,美国

Excel,VBA:清除内存

我有一个macros的Excel,没有太花哨,没有对象,只是普通的旧公式循环。 基本上是这样的: 我循环遍历一列中的行,为细胞分配相当大的SUMPRODUCT函数而不执行它们。 一旦我循环行,我做Range.Value = Range.Value两次执行公式,并将结果保存为值。 然后我去下一个专栏。 由Excel使用的每列内存显着增加,macros完成后,我保存文件 – 内存仍然使用(如果我可以信任任务pipe理器)。 closures并重新打开文件后 – 所有内存当然都被释放,我可以继续工作。 由于内存限制,我无法在32位Excel上处理所有需要的列。 我想知道,也许有一些技巧,我可以在列之间实现,使Excel忘记它一直记住? 我并不在意它是否会影响性能(如果它已经caching了任何对进一步计算有用的东西),我只需要保持内存使用量不会变得太大而无法处理。 我search了一下,但所有的build议都是关于把大的东西设置成什么都没有 – 我没有什么特别的东西,只是循环,所以可能不适用于我的情况。 代码是这样的(现在不要在我身上,但是它是一个简单的版本): for i = 1 to 12 ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Font.Color = vbWhite for m = 1 to x ThisWorkbook.ActiveWorksheet.Cells(m, i).Formula = "'=SUMPRODUCT(blah)" next m ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value = ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value = ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Font.Color = vbBlack next i 基本上,我把它们染成白色,所以我没有看到杂乱的function文本,添加function,执行它,保存为值,颜色文本黑色。 重要的补充:我使用SUMPRODUCT来从封闭文件中求和一些单元格。

在jxl中写入Excel单元格时发生内存不足错误

我正在使用JXL写一个50000行和30列的Excel文件。 我的代码如下所示: for(int j = 0; j <countOfRows; j ++){ myWritableSheet.addCell(new Label(0, j, myResultSet.getString(1), myWritableCellFormat)); myWritableSheet.addCell(new Label(1, j, myResultSet.getString(2), myWritableCellFormat)); ….. ….. } 在编写单元格时,程序变得越来越慢 最后在25000行左右出现以下错误: 线程“Thread-3”中的exceptionjava.lang.OutOfMemoryError:jxl.write.biff.WritableSheetImpl.getRowRecord上的Java堆空间(WritableSheetImpl.java:984)位于jxl.write.biff.WritableSheetImpl.addCell(WritableSheetImpl.java:951 )在KLL.ConverterMainFrame $ exportToXLSBillRightsThread.run(ConverterMainFrame.java:6895) 在Java中处理内存总是很困难。 在这种情况下,似乎是jxl的问题。 有没有办法写文件,清除内存,coninue每1000个单元格写入单元格? 这是一个好主意,还是你会提出一个解决scheme?

Excel VBA反复更改一个控制单元的内存

我在网上search的相当广泛,但没有find任何类似的经验。 有任何想法吗? 我在VBA中有一个简单的子程序来改变一个控制单元。 该控制单元由另一个表单中的公式使用。 随着代码改变控制值,Excel越来越多地使用Excel来停止Excel。 基本上我有一个3000行和330列的表单设置。 在工作表的每个单元格中填充以下相同的公式: =sum(sheet1!F8:INDEX(sheet1!F8:F$3000,Control!$D$1)) 所以在单元格A1您可以使用上面的公式,在单元格B1您将拥有: =sum(sheet1!F**9**:INDEX(sheet1!F9:F$3000,Control!$D$1)) 代码改变的控制值是Control!$D$1 ,因此改变控制从2到4将导致计算sheet1中连续2到4行的运行Sum。 请注意,代码首先在控制单元(200)中设置一个较高的值,然后降低到2.内存使用量的增加令我感到困惑。 我有的代码是: For i = 200 To 1 Step -1 Application.Calculation = xlCalculationManual ClearClipboard 'sets cutcopymode to false Range("Control!d1").Value = i Application.Calculation = xlCalculationAutomatic Next i 最后,我尝试了下面的select,但没有一个适合我: 在VBAarrays中进行所有计算:因为VBA不是multithreading的,所以这是非常慢的(关键是要利用我的cpu内核在Excel工作表中使用公式) 设置screenupdating = false,enablevents = false,cutcopymode = false没有明显的改进 将公式转换为值并通过VBA重新input公式:这再次减慢了计算速度 手动减less处理器的数量:因为我需要快速计算,所以打败了我的方法的目的 这是一个Excel错误?

电子表格:: WriteExcel内存使用

我试图创build一个多表excel文件,到目前为止我一直在用PHP做 – 但是使用PHPExcel总共消耗了大约60,000个电子表格单元的70MB RAM。 我想知道是否有人有Spreadsheet :: WriteExcel的经验,如果它有创build非常大的文件的问题。 我只是给它一个镜头,但是我对Perl不熟悉,即使进行testing也可能花费我相当多的时间,并且我认为这里有人可能对我有所了解。

编写Excel文件时出现Apache POI OutOfMemoryError

我正在使用Apache POI编写Excel文件。 我想写入myResultSet的所有数据 它具有存储在String []字段名中的字段名(列)。 我有70000行和27列 我的代码: String xlsFilename = "myXLSX.xlsx"; org.apache.poi.ss.usermodel.Workbook myWorkbook = new XSSFWorkbook(); org.apache.poi.ss.usermodel.Sheet mySheet = myWorkbook.createSheet("myXLSX"); Row currentRow = mySheet.createRow(0); for (int k = 0; k < fieldNames.length; k++) { // Add Cells Of Title Of ResultsTable In Excel File currentRow.createCell(k).setCellValue(fieldNames[k]); } for (int j = 0; j < countOfResultSetRows; j++) […]

VBA的Excelmacros使用太多的内存(select.insert似乎是原因)

我正在苦苦挣扎,因为内存使用量太大,无法完成。 我有一个具体的行似乎是负责这个: Selection.Insert Shift:= xlToRight 这是在一个while循环和一个if / else语句像这样: While SearchRow < lastRow If StrComp(…) = 0 Then … End If If StrComp(…) = 0 Then … End If If StrComp(…) = 0 _ Or StrComp(…) = 0 _ Or StrComp(…) = 0 Then ActiveSheet.Cells(SearchRow, 1).EntireRow.Delete Else ThisWorkbook.Sheets(…).Cells(SearchRow, 1).Select Selection.Insert Shift:=xlToRight End If Wend 我已经在debugging行中运行macros,所以当我进入If / […]