在wpf中要把数据导出到excel文件,引用了Microsoft.Office.Interop.Excel的dll在new Microsoft.Office.Interop.Excel.Application();的时候报异常:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 800702e4 请求的操作需要提升。 (异常来自 HRESULT:0x800702E4)。
private void btnExcel_Click(object sender, RoutedEventArgs e)
{
try
{
string fileName = "";
string saveFileName = "";
System.Windows.Forms.SaveFileDialog saveDialog = new System.Windows.Forms.SaveFileDialog();
saveDialog.DefaultExt = "xlsx";
saveDialog.Filter = "Excel 文件|*.xlsx";
saveDialog.FileName = fileName;
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; var xlApp = new Microsoft.Office.Interop.Excel.Application();//这一句报错
if (xlApp == null)
{
System.Windows.MessageBox.Show("无法创建Excel对象,您可能未安装Excel");
return;
}
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; //取得sheet1
//......
}
catch()
{
}
}
private void btnExcel_Click(object sender, RoutedEventArgs e)
{
try
{
string fileName = "";
string saveFileName = "";
System.Windows.Forms.SaveFileDialog saveDialog = new System.Windows.Forms.SaveFileDialog();
saveDialog.DefaultExt = "xlsx";
saveDialog.Filter = "Excel 文件|*.xlsx";
saveDialog.FileName = fileName;
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; var xlApp = new Microsoft.Office.Interop.Excel.Application();//这一句报错
if (xlApp == null)
{
System.Windows.MessageBox.Show("无法创建Excel对象,您可能未安装Excel");
return;
}
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; //取得sheet1
//......
}
catch()
{
}
}
可以使用开源项目 NPOI
方便
这有可能是被 WPS 等流氓软件把 Office 的系统注册表项给覆盖了。往往遇到这类事件,甚至重装 Office 都不行,甚至得去用 WPS 等的卸载软件去卸载、你的 Office 才能正常用。