Tag: 垃圾收集

按要求退出Excel实例作为类成员

我试图创build一个类,我想用excel实例工作,我想要退出excel实例按要求(正如在这个答案中提到的。仍然能够正确debugging我分离垃圾收集器的方式如下: Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim xlsInst As New ExcelInst GC.Collect() GC.WaitForPendingFinalizers() End Sub End Class Public Class ExcelInst Sub New() Dim myxlApp As New Excel.Application Dim myxlWb As Excel.Workbook '~~> Add a new Workbook myxlWb = myxlApp.Workbooks.Add '~~> Display Excel myxlApp.Visible […]

Apache POI – 双击Excel中的单元格,字体颜色恢复为默认的字体颜色(黑色)

我正在使用Apache POI 3.9以编程方式生成xlsx格式的excel。 对于特定的列,所有的单元格值应该是蓝色的字体。 我的表有1500多行,最less50列。 我有一个返回blueFont颜色样式的方法。 代码如下: public CellStyle createBlueFont(){ CellStyle fontStyle = workbook.createCellStyle(); // Creates new style Font blueFont = workbook.createFont(); // Creates new font blueFont.setColor(HSSFColor.BLUE.index); fontStyle.setFont(blueFont); fontStyle.setWrapText(true); return fontStyle; } 每次创build单元格时都会调用上述方法。 Excel生成没有任何例外。 但是,当我双击有蓝色字体填充的单元格时,它会自动恢复为黑色(默认颜色)。 我通过全局创build样式和字体来解决这个问题。 我不明白为什么我的老方法是错误的。 注:我正在使用SXSSF库进行工作簿和电子表格创build。 有人能解释我在我以前的代码错了吗? 谢谢阿斯维尼J

用于大型数据格式化程序的Python垃圾回收器

我写了一个程序来读取一个excel文件的文件夹,并将每个文件加载到程序中。 然后获取数据并创build一个大小为零的数组(3001,001),这些数据将被迭代,并将来自excel的相应坐标值更改为1。 该arrays然后重新塑造(1,6005001)的大小。 我正在使用tensorflow来重新整形数组,因为程序认为它是一个元组,但是最终的值被存储在一个numpy数组中。 我最终将最终格式化的数组存储到名为“filename_Array.csv”的csv文件中,然后程序移动到下一个要格式化的excel文件。 我在Eclipse上运行Python并安装了tensorflow 我遇到的问题是有些值被caching在内存中,但我无法弄清楚它是什么。 我试过显式删除将被重新初始化的大型variables,并使用gc.collect()来清除存储的非活动内存。 我仍然看到内存使用率稳步增加,直到大约25个文件格式化,然后电脑开始冻结,因为我的电脑上的所有内存(12GB)正在使用。 我知道python会自动清除内存中的程序完全无法访问的值,所以我不确定这是RAM还是别的问题。 对不起,对文本的墙壁,我只是想尽可能多地给这个问题的信息。 这是一个链接到我的性能选项卡的屏幕截图时,通过约24个文件运行该程序之前,我不得不终止程序,由于计算机冻结。 这是我的代码: from __future__ import print_function import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' import tensorflow as tf import numpy as np import csv import gc path = r'C:\Users\jeremy.desforges\Desktop\Eclipse\NN_MNIST\VAM SLIJ-II 4.500' def create_array(g,h,trainingdata,filename): # Multiplying by factors of 10 to keep precision of data g = g*1000 h = […]

在Apachi POI Java中将大型数据转换为Excel

我正在处理一个大的CSV (〜200 MB的文本文件) ,我想转换成Excel工作表,但工作簿变得如此消耗内存,在这个过程中,Java会抛出“ 超出GC上限 ”! 我检查了代码,如果我生成虚拟参考,但我认为不存在。 在我看来,这些来自Apachi – POI的库调用可能会产生一些引用,使垃圾收集器如此繁忙。 我的问题是,如果我可以通过像文本文件这样的块来将工作簿写入文件块,如附加到文本文件而不将其带入内存。 有没有解决scheme,或者我在这里错过了什么? GC在下面的代码中抛出exception: private void updateExcelWorkbook(String input, String fileName, Workbook workbook) { try { Sheet sheet = workbook.createSheet(fileName); // Create a new font and alter it. Font font = workbook.createFont(); font.setFontHeightInPoints((short) 11); font.setBold(true); // Fonts are set into a style so create a new one […]

Excel COM对象铸造错误

我试图避免在我的代码中的“双点”符号(请参阅如何正确清理Excel互操作对象? )。 但是,当我尝试更改以下代码时出现错误 Excel.Workbook oWB; … oWB.Sheets[oWB.Sheets.Count].Delete(); oWB.Sheets[oWB.Sheets.Count].Delete(); oWB.Sheets[oWB.Sheets.Count].Delete(); 对此 Excel.Sheets oS; oS = oWB.Sheets; //error occurs in the following line oS = oWB.Sheets[oS.Count]; oS.Delete(); oS.Delete(); os.Delete(); 错误是'Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Excel.Sheets'. This operation failed because the QueryInterface call on the COM component for the interface with IID […]

如何在不破坏对象的情况下停止VBAmacros

我写了一个VBA程序,它在Workbook_Open上创build一个将错误写入错误日志的文件stream。 如果我遇到一个致命的错误(因此需要暂停执行macros),程序将执行一个End语句,突然停止macros。 我知道这个解决scheme并不是一个理想的解决scheme,但是如果我深入了几个函数,我不能看到更好的方法来快速结束问题(也就是说,一个函数调用另一个函数调用另一个函数,第三个函数产生错误)。 退出发生错误的function只会影响该特定function,导致无效数据,意外单元值等的可能性。 但是这种方法会导致我另一个问题 – 当End执行时会销毁所有的对象,包括错误stream。 因此,当用户做了一些新的事情并且运行一个致命的错误时,他们得到了一个VBA运行时错误(91:Object …没有设置),因为代码写入了现在设置为Nothing.的文件streamNothing. 有没有更好的方法来结束macros(并因此避免错误后的意外行为),而不会丢失我的所有对象? 官方的VBA文档没有任何帮助。 提前致谢。

超过了Apache POI的GC开销限制

我有13个.xlsx文件,每个文件大约有1000行。 现在我想用一张表将它合并到一个.xlsx文件中。 我使用这里的代码http://blog.sodhanalibrary.com/2014/11/merge-excel-files-using-java.html#.Vi9ns36rSUk 。 这是我的代码(几个更改,addSheet方法不变) try { FileInputStream excellFile1 = new FileInputStream(new File("tmp_testOut1000.xlsx")); XSSFWorkbook workbook1 = new XSSFWorkbook(excellFile1); XSSFSheet sheet1 = workbook1.getSheetAt(0); for(int i = 2; i < 14; i++){ FileInputStream excellFile2 = new FileInputStream(new File("tmp_testOut" + i + "000.xlsx")); XSSFWorkbook workbook2 = new XSSFWorkbook(excellFile2); XSSFSheet sheet2 = workbook2.getSheetAt(0); System.out.println("add " + i); addSheet(sheet1, sheet2); […]

Excel过程仍然在VB.netclosures后运行

我的问题基本上是如何结束使用Excel时运行的Excel.exe进程。 在应用程序中,我打开并使用一对Excel工作簿,然后让用户按照自己的意愿去做,问题是我的应用程序永远不会放弃Excel进程。 如果在closuresexcel之前closures了应用程序,那么在excelclosures的时候这个过程就会结束,否则如果我在closuresexcel之后closures了我的应用程序,那么这个过程将继续运行。 我已经尝试了一些我在互联网上发现的与GC.collect相关的事情,并等待未决的终结器或者沿着这些线路发生的事情,但是都没有成功。 我也可以愉快地closuresexcel过程,唯一的问题是不知道我是否closures了一个用户重要的电子表格,他们忽略了保存还是我的。 我不确定是否有任何代码可以帮助我的答案,但我正在使用microsoft.office.interop.excel获得excel,并且我正在使用已经保存在应用程序资源文件夹中的工作簿。 -编辑- 这是我所尝试过的一切,我知道这有点矫枉过正,但遗憾的是,这还不能结束这个过程 Marshal.ReleaseComObject(FirstWorksheet) Marshal.FinalReleaseComObject(FirstWorksheet) Marshal.ReleaseComObject(SecondWorksheet) Marshal.FinalReleaseComObject(SecondWorksheet) Marshal.ReleaseComObject(ThirdWorksheet) Marshal.FinalReleaseComObject(ThirdWorksheet) Marshal.ReleaseComObject(FourthWorkSheet) Marshal.FinalReleaseComObject(FourthWorkSheet) Marshal.ReleaseComObject(xlRange) Marshal.FinalReleaseComObject(xlRange) Marshal.ReleaseComObject(SecondxlRange) Marshal.FinalReleaseComObject(SecondxlRange) Marshal.ReleaseComObject(thirdxlRange) Marshal.FinalReleaseComObject(thirdxlRange) Marshal.ReleaseComObject(fourthxlRange) Marshal.FinalReleaseComObject(fourthxlRange) Marshal.ReleaseComObject(.activeworkbook) Marshal.FinalReleaseComObject(.activeworkbook) Marshal.ReleaseComObject(excelApplication) Marshal.FinalReleaseComObject(excelApplication) MSExcelControl.QuitExcel() 'A function made by someone else I work with that was meant to close excel's process GC.Collect() GC.WaitForPendingFinalizers() GC.Collect() GC.WaitForPendingFinalizers() – 编辑 – 这是quitExcel方法 Friend Shared […]

如何正确清理C#中的互操作对象

这是如何正确清理C#中的Excel互操作对象的问题 。 gyst是在Excel命名空间内使用链接调用(例如,ExcelObject.Foo.Bar())防止COM对象的垃圾收集。 相反,应该显式创build一个对每个使用的COM对象的引用,并使用Marhsal.ReleaseComObject()明确地释放它们。 仅在特定于Excel COM对象的链接调用之后不释放COM对象的行为? 每当一个COM对象被使用时,应用这种模式是否有点矫枉过正?

无法打开另一个Excel文件(当通过.net打开一个Excel时)

我devise了一个.net应用程序,它将在login时打开一个excel文件,并用它来打印报告。 注销用户时将被closures。 我为excel文件设置可见为false,以便用户不知道后台进程。 但是,如果有人在这段时间内打开任何其他的Excel文件,我的报告Excel文件变得可见,并且Excel对象被折叠。 我必须去任务pipe理器并杀死所有打开的Excel实例来解决这个问题。 码: Private Sub OK_Click(sender As Object, e As EventArgs) Handles OK.Click Try Dim dt As New DataTable() Dim Adapter As New SqlDataAdapter() ConnectMe() Dim SQLCmd As New SqlCommand("uspLogin", Con) SQLCmd.CommandType = CommandType.StoredProcedure SQLCmd.Parameters.AddWithValue("@pLoginName", UsernameTextBox.Text.Trim()) SQLCmd.Parameters.AddWithValue("@pPassword", PasswordTextBox.Text.Trim()) Adapter.SelectCommand = SQLCmd Adapter.Fill(dt) SQLCmd.Dispose() If dt.Rows.Count > 0 Then Me.Cursor = Cursors.WaitCursor Loading.Show() […]