- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一个项目,我需要在 Excel 中自动化一些工作流程,但我遇到了一个非常讨厌的障碍。在项目中,我使用 Visual Studio Tools For Office 创建文档级加载项。用户使用作为该项目一部分的功能区控件来自动从项目外部的工作簿复制工作表。外部工作簿从 SQL blob 加载并写入磁盘。加载项代码打开每个工作簿,将工作表复制到加载项工作簿中,然后关闭该外部工作簿。通常,第一个工作簿工作正常,但打开后续工作簿将引发 AccessViolationException。
public void AddSheetFromTempFile(string tempfilePath)
{
Sheets sheets = null;
Excel.Workbook workbook = null;
Excel.Workbooks books = null;
try
{
books = this.Application.Workbooks;
//Throws AccessViolationException
workbook = books.Open(tempfilePath, 0, true, 5,
String.Empty, String.Empty, true, XlPlatform.xlWindows,
String.Empty, true, false, 0, true, true, false);
sheets = workbook.Worksheets;
sheets.Copy(After: this.GetLastWorksheet());
workbook.Close(SaveChanges: false);
}
finally
{
if (sheets != null)
{
Marshal.FinalReleaseComObject(sheets);
}
if (workbook != null)
{
Marshal.FinalReleaseComObject(workbook);
}
if (books != null)
{
Marshal.FinalReleaseComObject(books);
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
//extension method for getting last worksheet
public static Microsoft.Office.Interop.Excel.Worksheet
GetLastWorksheet(this Microsoft.Office.Tools.Excel.WorkbookBase workbook)
{
int veryHiddenSheets = 0;
foreach(Worksheet sheet in workbook.Worksheets)
{
if(sheet.Visible == XlSheetVisibility.xlSheetVeryHidden)
{
veryHiddenSheets++;
}
}
int lastIndex = workbook.Worksheets.Count - veryHiddenSheets;
return workbook.Worksheets[lastIndex];
}
ntdll.dll!_ZwWaitForSingleObject@12() + 0x15 bytes
ntdll.dll!_ZwWaitForSingleObject@12() + 0x15 bytes
kernel32.dll!_WaitForSingleObjectExImplementation@12() + 0x43 bytes
[External Code]
First-chance exception at 0x2ff2489e in Excel.exe: 0xC0000005: Access violation reading location 0x00000000.
A first chance exception of type 'System.AccessViolationException' occurred in PublicCompModel.DLL
An exception of type 'System.AccessViolationException' occurred in PublicCompModel.DLL but was not handled in user code
最佳答案
经过大量调试、微软 VSTO 团队的支持票,以及一些漫长的夜晚,我终于找到了答案。问题不是源于我的代码,而是源于工作簿本身。最初,我们将代码编写为一个独立的项目,然后从我们用户的电子表格模型中集成了工作表。关键问题是,当您开始从其他工作簿复制工作表时,您会随同这些工作簿命名引用。我们的用户组为我们提供了一个包含数百个我们以前从未见过的错误引用的文件。
即使您使用 Application 对象抑制警告,这些事件仍会在后台触发。 C# 操作工作簿状态时触发的大量事件导致了 AccessViolationException。
我学到的教训:确保清理工作簿并观察工作簿在没有代码的情况下的行为。由于时间问题,我们被迫在 Microsoft 调试我们的代码时用 VBA 重写解决方案。在我们清理资源之前,VBA 代码运行更稳定,这可能源于它被解释并且根据我的观察在单个线程上运行的事实。
顺便说一句,如果您在文档加载项的上下文中使用 VSTO,则应该小心释放引用。在许多情况下,您可能不需要这样做,因为 Excel 可能会为您清理它。考虑释放 COM 对象 dangerous .
关于visual-studio-2010 - ThisWorkbook.Application.Workbooks.Open 中的 AccessViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10666999/
如何引用我的主要工作簿和通过此子过程打开的第二个工作簿?我尝试做workbooks.("client_path").activate因为我使用此宏的目标是打开一个单独的工作簿,该工作簿分配给变量 cl
看到这篇文章Detail AttributeError: 'module' object has no attribute 'workbook'对于同样的错误,有一个拼写错误。“W”对于工作簿来说是大
我创建了一个文件并将其引用为 GlobalFile . 然后我将它保存为“Glo”,然后保存为“Ume”。然后我重新打开保存的文件,以在两个不同的 Workbook 对象中以两个不同的名称打开两个不同
我无法将数据从一个工作簿复制到另一个工作簿。但在同一工作簿中它的工作原理。运行宏程序后,目标工作表为空。我有2个代码。两者都不工作。我的源文件是.xlsx格式,目标文件是.xlsm格式。有没有错误?
我在一个文件夹中有许多相同结构的 excel 文件(Test01、Test02、Test03)。 我在同一个文件夹中创建了另一个 excel 文件,需要从其他 excel 文件(结果)中提取信息。 每
我正在尝试将整个工作表从一个 Excel 文件复制到另一个 Excel 文件中的工作表。以下是我编写的代码,但不起作用。请提出更改建议。 Sub copyallwos() Dim wkbSource
各位,我正在尝试设置 WorkbookSaveAsArgs 的 TextCodepage 属性,用作 Workbook 方法 SaveAs 的参数。它用于将 .xls 文件转换为 .csv 文件。但是
我目前正在使用 Workbooks.Open 来处理目录中包含的大量文件。但是打开和关闭这些文件会使文件出现在任务栏中,我想避免不断闪烁。 我收到一条建议,我可以使用 CreateObject 创建一
我在 Oracle Linux 6.6 中运行我的 Python 程序时遇到以下异常。我使用的是 Python 2.6 版。 Exception('Exception caught in workbo
我正在尝试将一堆 CSV 文件放入一个工作簿中,这是我的代码: import csv import glob import openpyxl import os, sys import pandas
我有一个大型 Microsoft Excel 文件,在办公室的用户之间共享。该文件有一个宏和一组数据验证。该文件每三个月的最后两周使用一次。该文件在圣诞节之前工作得很好,但是,我们在三月份遇到了错误。
我感觉我错误地使用了“onLoad”回调。基本上我要做的是在我的自定义功能区加载后立即在 VBA 中运行一些代码(位于我创建的加载项上)。 这是 XML 代码: 这是 VBA 代码: 这是一个全局声
当我在 VBA 中调用 Thisworkbook.Protect 时,工作簿的保护实际上会切换当前工作簿的保护状态,而不仅仅是保护工作簿。 Thisworkbook.Unprotect 但不会执行此操
我得到了一个由前同事创建的 Excel 文件。 Excel文件有数据连接链接到一些提取数据的位置,如何知道源的实际路径?我只看到它链接到 Data Source=Workbook; 工作簿的实际路径是
我正在尝试在 Microsoft Excel VBA 2010 中使用 Workbooks.Open 方法,但我收到一个编译错误,指出它需要“=”。我打错代码了吗? Workbooks.Open (
我有这段代码,它使用 workbook.open 打开 Excel 文件的下载链接。 Set wkbWebWorkbook = Workbooks.Open("sample") 在我的机器上,这总是有
我正在尝试复制打开一个工作簿,复制一个范围并将其粘贴到另一个工作簿中。打开工作簿并选择宏停止的范围后。 如果我稍后在代码中使用 Workbook.close,宏会在同一点停止,但工作簿甚至没有打开。
我正在编写一些将在按下按钮时运行的代码,打开一个 .csv 文件(从另一个程序导出),复制一些信息,然后将其粘贴到第一个文件中。有时(并且只有某些时候)它实际上会粘贴来自不同文件的信息。它似乎在打开另
我正在尝试将 .xls 文件转换为 .xlxs 我尝试了此代码的许多变体,但每次我遇到此错误消息时: Exception lors de l'appel de « SaveAs » avec « 2
我在尝试使用 VBA 读取两个 .CSV 文件的内容时遇到问题。这两个文件的结构如下: 当我使用 Workbooks.Open(
我是一名优秀的程序员,十分优秀!