[英]COMException C# Microsoft.Office.Interop.Excel
我正在尝试解决COMException遇到的问题。 这是我的代码:
错误发生在原始工作簿=新工作簿(结果[0]);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MahApps.Metro.Controls;
using MahApps.Metro;
using Microsoft.Win32;
using System.Windows.Forms;
using System.Data;
using Microsoft.Office.Interop.Excel;
namespace KPI_Generator_v3
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : MetroWindow
{
string [] result;
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
public MainWindow()
{
InitializeComponent();
}
private void exit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void browse_Click(object sender, RoutedEventArgs e)
{
// Create OpenFileDialog
instructionslbl.Visibility = Visibility.Hidden;
dlg.Multiselect = true;
dlg.ShowDialog();
result = dlg.FileNames;
dlg.DefaultExt = ".xls";
dlg.Filter = "XLS Files (*.xls)|*.xls";
foreach (string fileName in result)
{
displayFilesBox.Text += fileName + System.Environment.NewLine;
}
SelectedFileslbl.Visibility = Visibility.Visible;
displayFilesBox.Visibility = Visibility.Visible;
generateBtn.Visibility = Visibility.Visible;
}
private void generate_Click(object sender, RoutedEventArgs e)
{
Workbook Original = new Workbook(result[0]);
for (int i = 1; i <= result.Length; i++)
{
Workbook next = new Workbook(result[i]);
Worksheet newOGsheet = Original.Worksheets.Add();
Worksheet nextSheet = next.Worksheets[0];
nextSheet.Copy(newOGsheet);
}
}
}
}
现在..尽管上面的代码可能无法正常工作,但我收到一条错误消息,指出
mscorlib.dll中发生了'System.Runtime.InteropServices.COMException'
加上其他信息说
HRESULT:0x80040154(REGDB_E_CLASSNOTREG))
谷歌搜索一段时间后,我下载了依赖行者,并获得以下输出:
我不知道我在做什么,将不胜感激! 谢谢
编辑:HKEY CLASSES_ROOT的REGEDIT图片(如果需要)
EDIT2:错误图片
不幸的是,此错误是COM互操作漏洞。 否则,您将遇到编译错误,因为Workbook
是一个接口并且没有构造函数。 此接口不是要实例化的,这就是为什么您遇到此异常的原因。 (不知道为什么还要在此处传递文件名...)
要解决此问题,请使用Microsoft.Office.Interop.Excel.Application:
using Microsoft.Office.Interop.Excel;
Application excelApp = new Application();
excelApp.Workbooks.Open(result[0]);
其他说明:
dlg.ShowDialog()
-这样,您的过滤器就会生效。 result.Length > 0
之前添加它,只是要确保用户实际打开了一些东西。 i < result.Length
; 否则,您将获得IndexOutOfRangeException
另外,只需添加更多信息:您可能会问:“但是,等等,ryrich, Application
也是一个接口!我怎么能实例化它,而不能实例化Workbook
?”
我也想知道。 显然,这是CoClassAttribute
因为它装饰有CoClassAttribute
(和其他一些属性)。 有关更详细的信息,请参阅该堆栈溢出职位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.