使用VSTO或某些相关技术,是否可以以编程方式在Excel工作表的单元格中嵌入按钮,并将其配置为在单击时调用C#函数?
怎么样?
谢谢.
我创建了一个excel工作簿,其中包含许多工作表,如sheet1,sheet2,...等.如何在C#中动态重命名这些选项卡名称?
我有一个C#WPF(.NET 4.0)应用程序,它使用Excel互操作从Excel文件中读取数据.
当我在具有Excel 2007的开发机器上运行此应用程序时,它工作正常.当我在另一台安装了Excel 2010的计算机上运行它时,它失败并显示以下错误消息:
System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索CLSID为{00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG) )).
尝试创建Microsoft.Office.Interop.Excel.Application对象时发生故障,如:
var app = new Application();
Run Code Online (Sandbox Code Playgroud)
我的项目引用了Microsoft.Office.Interop.Excel.dll(版本14.0.0.0,运行时版本v2.0.50727),它位于:
用于Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll的C:\ Program Files\Microsoft Visual Studio 10.0\Visual Studio工具
我尝试使用引用的dll上的默认设置运行应用程序:
我还尝试在引用的dll上使用以下设置运行应用程序:
但是在使用Office 2010的计算机上,这些尝试都没有奏效.
其他说明:Office 2010的计算机是64位w/Windows 7.我的开发计算机是带有Windows XP的X86.
题
是什么导致"类未注册"异常,我该如何解决?
编辑
为了回应Alex的回答,我尝试将应用程序构建为任何CPU,X86和X64,但它没有任何区别.我仍然得到相同的"类未注册"错误.
编辑2
刚刚使用Office 2010在32位计算机上试用过该应用程序.没有错误.因此,特定机器可能出现问题,或者可能是64位和Office 2010的组合.
编辑3
好的,现在我已经在Office 2010的另一台64位计算机上测试了它.再次没有错误.我认为这意味着特定机器出了问题,这不是我软件的错.啊编程.
我正在用c#创建一个excel应用程序.由于我将紧急维护excel文件,我想保持其处理程序打开.我想保留excel进程ID,以便在系统崩溃时能够将其终止.
如何在创建Excel时获取Excel Pid?
我正在尝试将Excel文件保存到数据库中,我不想使用文件流,因为它需要有一个服务器.
那么如何在具有类型列的表中插入/更新/选择varbinary(max)?
我已经开始使用Microsoft提供的Excel互操作程序集来处理我的一个C#应用程序.一切都很顺利,但似乎缺乏强大的打字,老实说,感觉就像我在写VBA代码.有没有其他方法可以与C#进行Excel交互,从而提供更好的OO体验?我顺便使用VS2010和.Net 4.0.
我想知道如何更新现有的数据透视表数据源.我正在使用Microsoft.Office.Interop.ExcelExcel 2010 来定位用户.
我目前能够刷新数据透视表,它工作正常,但是当添加更多行时,我想在数据透视表数据源中包含这些行.例如,在Excel中查看时的数据透视表数据源是,DataSourceWorksheet!$A$2:$U$26并且我希望DataSourceWorksheet!$A$2:$U$86在更新/刷新Excel文件代码运行后将其更改为(60多行).
这是我的代码的简化版本
Application excelApplication = new Application();
Workbooks workbooks = excelApplication.Workbooks;
wrkBook = workbooks.Open(EXCEL_DOCUMENT_PATH, Missing.Value, false, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, true, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value);
/* update data source worksheet code here (omitted for example) */
Worksheet pivotWorkSheet = (Worksheet)wrkBook.Sheets[PIVOT_SHEET_NAME];
PivotTable pivot = (PivotTable)pivotWorkSheet.PivotTables(pivotTableName);
/* I would like to update the pivot tables data source here...
I could use Range object from data source worksheet...
Basically just want …Run Code Online (Sandbox Code Playgroud) 我遇到了一些我正在调试的代码问题.Excel interop用于从工作簿中提取某些值; 但是,Excel程序退出后仍保持打开状态.我已经尝试了传统的解决方案,但它仍然在运行代码的所有机器上保持对Excel的引用
private void TestExcel()
{
Excel.Application excel = new Excel.Application();
Excel.Workbooks books = excel.Workbooks;
Excel.Workbook book = books.Open("C:\\test.xlsm");
book.Close();
books.Close();
excel.Quit();
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(books);
Marshal.ReleaseComObject(excel);
}
Run Code Online (Sandbox Code Playgroud)
即使是这段简单的代码也可以使进程运行多个文件(xlsm,xlsx,xls).现在我们有一个解决方法来杀死我们已经打开的Excel进程,但我更倾向于让这个工作为我自己的理智.
我应该补充一点,我已将其缩小到Workbook变量.如果我删除了对books.Open()所有引用的调用,book那么它将成功关闭.
我使用Microsoft Office Interop编辑一些excel文件,当我关闭它们时,我使用
outputExcelWorkBook.Close(false, paramMissing, paramMissing);
Run Code Online (Sandbox Code Playgroud)
但是仍然出现一个对话框,即使我false作为第一个参数传递.我也尝试过true并给它一个文件路径作为第二个参数,但在这两种情况下都会出现一个对话框,询问我是否要在关闭之前保存.谁能告诉我这里发生了什么?
在这里,我打开excel并写入excel表.我正在将我的Windows应用程序更改为asp网站并看到此错误.我添加了所有引用和库.不知道我在这里失踪了什么.
如下所述获得错误.请帮我.
Excel.Application excel = new Excel.Application();
excel.Visible = false; // to hide the processing
Excel.Workbook wb = excel.Workbooks.Add();
Excel.Worksheet sh = wb.Sheets.Add(); // Error at wb
sh.Name = "Links";
for (int i = 1; i < list.Count; i++)
{
sh.Cells[i.ToString(), "A"].Value2 = list[i]; //Error at .Value2
}
Run Code Online (Sandbox Code Playgroud)