就像我说的,我的winform应用程序在安装了VS的计算机上正常运行,但在其他计算机上,它会因FileNotFound Exception
而崩溃。我用了
using Application = Microsoft.Office.Interop.Excel.Application;
在我的源代码中生成Excel文件,一旦调用与Excel相关的函数就会出现问题。但我不知道究竟是什么意思。我是否必须在.exe文件中包含一些.dll
? DLL
是什么?
以下是我的代码的一部分:
private void FileExport(object objTable)
{
StartWaiting();
string[,] table = null;
try
{
table = (string[,])objTable;
}
catch (Exception ex)
{
ShowStatus(ex.Message, StatusType.Warning);
}
if (table == null)
{
return;
}
Application excelApp = new Application
{
DisplayAlerts = false
};
Workbooks workbooks = excelApp.Workbooks;
Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
worksheet.Name = "TABLE";
for (int i = 0; i < table.GetLength(0); i++)
{
for (int j = 0; j < table.GetLength(1); j++)
{
worksheet.Cells[i + 1, j + 1] = table[i, j];
}
}
Range range = excelApp.Range["A1", "H1"];
range.Merge();
range.Font.Bold = true;
range.Font.Size = 15;
range.RowHeight = 50;
range.EntireRow.AutoFit();
range = excelApp.Range["A2", "H8"];
range.Font.Size = 11;
range = excelApp.Range["A1", "H8"];
range.NumberFormatLocal = "@";
range.RowHeight = 300;
range.ColumnWidth = 50;
range.HorizontalAlignment = XlHAlign.xlHAlignCenter;
range.VerticalAlignment = XlVAlign.xlVAlignCenter;
range.EntireRow.AutoFit();
range.EntireColumn.AutoFit();
worksheet.UsedRange.Borders.LineStyle = 1;
Invoke(new MainThreadInvokerDelegate(SaveAs), new object[] { worksheet, workbook, excelApp }
);
EndWaiting();
}
`
答案 0 :(得分:2)
我认为您的计划正在寻找Microsoft.Office.Interop.Excel.dll
的副本而未找到它。
为此,请转到解决方案资源管理器,确保选中“显示所有文件”,然后打开参考列表。
选择对Microsoft.Office.Interop.Excel.dl
l的引用,然后按F4打开“属性”菜单。在那里,将Copy Local更改为True
,并且现在应该将引用的dll复制到您的输出目录,这意味着将找到该文件并且程序应该可以正常工作。
答案 1 :(得分:1)
正如其他人提到的,您可能忘记将Microsoft.Office.Interop.Excel.dll
与应用程序文件一起部署。您可以在部署应用程序时包含这些文件,也可以使用可以自动执行此操作的Windows Installer。安装程序将负责部署项目文件及其所有依赖项。关于这个主题MSDN说:
生成的Windows Installer(.msi)文件包含应用程序, 任何依赖文件,有关应用程序的信息,如 注册表项和安装说明。
旁注:您必须确保在其他计算机上安装了Excel,否则您的应用程序将无法按预期方式运行。