标签: excel-interop

在.NET(VSTO)中向电子表格添加按钮

使用VSTO或某些相关技术,是否可以以编程方式在Excel工作表的单元格中嵌入按钮,并将其配置为在单击时调用C#函数?

怎么样?

谢谢.

.net c# vsto excel-interop

9
推荐指数
1
解决办法
6522
查看次数

如何在C#中动态重命名Excel工作表名称

我创建了一个excel工作簿,其中包含许多工作表,如sheet1,sheet2,...等.如何在C#中动态重命名这些选项卡名称?

.net c# excel excel-interop

9
推荐指数
2
解决办法
3万
查看次数

Excel interop在Office 2007的计算机上运行,​​但在使用Office 2010的计算机上失败

我有一个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上的默认设置运行应用程序:

  • 复制Local = False
  • 嵌入互操作类型=真
  • 具体版本=真

我还尝试在引用的dll上使用以下设置运行应用程序:

  • 复制Local = True
  • 嵌入互操作类型=假
  • 具体版本=真

但是在使用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# com dll excel excel-interop

9
推荐指数
1
解决办法
8728
查看次数

获得excel应用程序进程ID

我正在用c#创建一个excel应用程序.由于我将紧急维护excel文件,我想保持其处理程序打开.我想保留excel进程ID,以便在系统崩溃时能够将其终止.

如何在创建Excel时获取Excel Pid?

c# excel-interop

9
推荐指数
2
解决办法
2万
查看次数

如何在SQL Server 2008中将Excel文件插入/检索到varbinary(max)列?

我正在尝试将Excel文件保存到数据库中,我不想使用文件流,因为它需要有一个服务器.

那么如何在具有类型列的表中插入/更新/选择varbinary(max)

.net c# excel-interop sql-server-2008 varbinarymax

9
推荐指数
1
解决办法
2万
查看次数

excel互操作替代方案

我已经开始使用Microsoft提供的Excel互操作程序集来处理我的一个C#应用程序.一切都很顺利,但似乎缺乏强大的打字,老实说,感觉就像我在写VBA代码.有没有其他方法可以与C#进行Excel交互,从而提供更好的OO体验?我顺便使用VS2010和.Net 4.0.

c# excel-interop

8
推荐指数
1
解决办法
1万
查看次数

如何使用C#更新数据透视表数据源?

我想知道如何更新现有的数据透视表数据源.我正在使用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)

c# excel-interop

8
推荐指数
1
解决办法
1万
查看次数

互操作后Excel流程仍然开放; 传统方法不起作用

我遇到了一些我正在调试的代码问题.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那么它将成功关闭.

.net c# com excel-interop

8
推荐指数
2
解决办法
8146
查看次数

尝试在没有对话框的情况下退出C#Excel工作簿

我使用Microsoft Office Interop编辑一些excel文件,当我关闭它们时,我使用

outputExcelWorkBook.Close(false, paramMissing, paramMissing);
Run Code Online (Sandbox Code Playgroud)

但是仍然出现一个对话框,即使我false作为第一个参数传递.我也尝试过true并给它一个文件路径作为第二个参数,但在这两种情况下都会出现一个对话框,询问我是否要在关闭之前保存.谁能告诉我这里发生了什么?

c# excel-interop excel-automation

8
推荐指数
1
解决办法
7426
查看次数

无法将类型'object'隐式转换为'Microsoft.Office.Interop.Excel.Worksheet'.存在显式转换(您是否错过了演员?)

在这里,我打开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)

.net c# excel interop excel-interop

8
推荐指数
1
解决办法
2万
查看次数