我创建了一个简单的应用程序.net类,它将excel电子表格转换为pdf文件。然后我得到一个Excel 2007应用程序来调用这个dll,它在我的开发机器上工作正常。
但是,当我将它部署到具有.net框架和Excel 2007的Vista计算机上时,我收到此错误:
run-time error '429' activex component can't create object
即使我是该机器的管理员,我也似乎无法将已签名的.net dll放入GAC。
有人可以帮我解决这个问题吗?
这就是我从Excel 2007调用.net tlb
文件的方式。
Sub TestSub()<br>
Dim printLibraryTest As PrintLibrary.Print<br>
Set printLibraryTest = New PrintLibrary.Print <br>
printLibraryTest.ConvertExcelToPdf <br>
End Sub <br>
这是下面的.net库。
using System;<br>
using System.Collections.Generic;<br>
using System.Runtime.InteropServices;<br>
using System.Text;<br>
using Microsoft.Office.Interop.Excel;<br><br>
namespace PrintLibrary<br>
{<br>
[ClassInterface(ClassInterfaceType.None)]<br>
[Guid("3d0f04d2-9123-48e0-b12f-6c276ff2281b")]<br>
[ProgId("PrintLibrary.Test")]<br>
public class Print<br>
{ <br>
public void ConvertExcelToPdf(string inputFile,string outputFile) <br>
{ <br>
ApplicationClass excelApplication = new ApplicationClass(); <br>
Workbook excelWorkBook = null; <br>
string paramSourceBookPath = inputFile; <br>
object paramMissing = Type.Missing; <br>
string paramExportFilePath = outputFile;
XlFixedFormatType paramExportFormat = XlFixedFormatType.xlTypePDF;
XlFixedFormatQuality paramExportQuality =
XlFixedFormatQuality.xlQualityStandard;
bool paramOpenAfterPublish = false;
bool paramIncludeDocProps = true;
bool paramIgnorePrintAreas = true;
object paramFromPage = Type.Missing;
object paramToPage = Type.Missing;
try
{
// Open the source workbook.
excelWorkBook = excelApplication.Workbooks.Open(paramSourceBookPath,
paramMissing, paramMissing, paramMissing, paramMissing,
paramMissing, paramMissing, paramMissing, paramMissing,
paramMissing, paramMissing, paramMissing, paramMissing,
paramMissing, paramMissing);
// Save it in the target format.
if (excelWorkBook != null)
excelWorkBook.ExportAsFixedFormat(paramExportFormat,
paramExportFilePath, paramExportQuality,
paramIncludeDocProps, paramIgnorePrintAreas, paramFromPage,
paramToPage, paramOpenAfterPublish,
paramMissing);
}
catch (Exception ex)
{
// Respond to the error.
}
最后
{
// Close the workbook object.
if (excelWorkBook != null)
{
excelWorkBook.Close(false, paramMissing, paramMissing);
excelWorkBook = null;
}
// Quit Excel and release the ApplicationClass object.
if (excelApplication != null)
{
excelApplication.Quit();
excelApplication = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}
}
答案 0 :(得分:1)
一年后......
这可能是由于与此相同的原因:http://support.microsoft.com/kb/313984/en-us
发生错误是因为目标计算机缺少应用程序中使用的控件对象的许可证信息[...]这将生成包含正确版本的Winsock控件的安装程序包。但是,除非将控件的实例放在表单上,否则不会将控件的许可证密钥编译到应用程序中。当您尝试在运行时实例化对象时,应用程序无法提供许可证密钥,代码将失败。例如,以下代码将在设计时正常运行,但在运行时将在未安装Visual Basic的计算机上失败。
这里似乎与您的案件有关系:
解决方法似乎是将控件放在表单上。
也可以查看这篇文章:Run-time error '429'
答案 1 :(得分:0)
Excel 2007 VB脚本运行时错误429:
Set objFSO = CreateObject("Scripting.FileSystemObject").
解决方案:
参考文献: