标签: excel-interop

C#和Excel Interop问题,保存excel文件不顺畅

我可以打开和写入excel文件,但是当我尝试通过向其传递路径来保存文件时,保存操作会提示"保存"对话框.我希望它能够在指定的路径上保存文件

代码如下:

excelApp.Save(exportToDirectory);
excelApp.Quit();
Run Code Online (Sandbox Code Playgroud)

其中,exportToDirectory是:"C:\ files\strings.xlsx".

PS:我已经检查了excel版本和类似的问题.

谢谢

c# interop excel-interop

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

在C#中的Excel [2007]中添加超链接 - 在Excel中自带

任何人都可以告诉我如何使用.NET中的Office Interop(c#)将Excel(2007或更高版本)中的超链接从一个工作表中的单元格添加到另一个工作表中的单元格

例如:从Sheet1 Cell A1到Sheet2 Cell B10的超链接

c# excel office-interop excel-interop

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

在C#中将Timespan转换为DateTime

我正在使用C#和Microsoft.Office.Interop阅读Excel工作表数据.工作表包含一些日期值.当我试图读取该值时,它只是给出了数字(可能是TimeSpan).我在将此数字转换为DateTime时遇到问题.

以下是代码:

TimeSpan ts = TimeSpan.Parse(((Range)ws.Cells[4, 1]).Value2.ToString());
Run Code Online (Sandbox Code Playgroud)

哪里wsExcel.WorkSheet.

任何人都可以解释我应该如何将这个数字(TimeSpan)转换成DateTime

感谢您分享宝贵的时间.

c# datetime ole-automation excel-interop

10
推荐指数
3
解决办法
4万
查看次数

microsoft.interop.excel格式化单元格

我正在使用C#中的microsoft.interop.excel库构建报告.

我有这样的事情:

 Range rangeTarget;
 .
 .
 .
 rangeTarget = worksheet.get_Range("C" + row, "N" + row);
Run Code Online (Sandbox Code Playgroud)

我希望范围显示其值作为整数,即没有小数位.我尝试过rangeTarge.AutoFormat,但不知道如何使用它.

有任何想法吗 ?

谢谢.

c# excel formatting office-interop excel-interop

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

在Visual Studio 2010的调试模式下运行时,Excel不会打开/启动VSTO AddIn

我之前安装过VS11测试版,并且我的Visual Studio 2010实例存在一些问题,您可以在此处看到它们是如何解决的:Excel AddIn Click Once deployment问题.

现在我有一个编译/构建vsto的代码库,它安装得很好并且在Excel 2010中运行良好.但是,当我从Excel中删除已安装的版本并尝试直接通过Visual Studio 2010运行它时,AddIn无法获得在调试配置模式下运行时加载到Excel中,在发布配置模式下,它可以正常工作.有关为何可能发生这种情况的任何想法?我已经尝试通过Com AddIns重新启用它,以及其他一些没有运气的东西.

excel vsto visual-studio-2010 excel-interop visual-studio

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

无法在C#中打开Excel文件

我的项目中有以下C#函数,它应该打开并返回一个现有的Excel工作簿对象:

Application _excelApp;

// ...

private Workbook OpenXL(string path, string filename)
{
    try
    {
        if (_excelApp == null)
        {
            _excelApp = new Application();
        }

        Workbook workBook = _excelApp.Workbooks.Open(path + filename,   // Name
                                                     0,                 // Do not update links
                                                     true);             // Open read-only

        return workBook;
    }
    catch (Exception e)
    {
        _excelApp = null;
        throw new ArgumentException("Error opening " + path + filename, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我用"C:\"和"scratch.xlsx"运行它时,Open()调用会抛出以下错误:

Microsoft Excel cannot access the file 'C:\scratch.xlsx'. There are several possible reasons:

• The file …
Run Code Online (Sandbox Code Playgroud)

c# excel-interop

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

如何调试慢速Office应用程序互操作构造函数?

我有一个处理excel的应用程序.最近我遇到了Excel对象创建速度非常慢的问题.

我用这个简单的代码重新创建了这个问题:

Microsoft.Office.Interop.Excel.Application xlApp;
xlApp = new Microsoft.Office.Interop.Excel.Application(); 
Run Code Online (Sandbox Code Playgroud)

第二行导致延迟.

为了测量新对象分配所需的时间,上面的代码已经扩展了时间跟踪解决方案,结果是确凿的.在NORMAL情况下,上面的代码在0.5秒内执行,而在FAULTY-BEHAVIOR的情况下,它可能需要长达5分钟.

没有内存泄漏,并且正确释放了excel对象.我的解决方案全年24/7运行,没有任何问题.我不确定它是否重要但是应用程序在20个单独的用户会话(服务器机器)上运行.因此,此应用程序有20个副本同时运行,可能会导致同时运行20个Excel副本.

这个问题第一次在2个月前被注意到,并且已通过升级办公室(2010年 - > 2013年)得到解决.这次我有更多时间进行调查,遗憾的是结果并不乐观.

事实:

  • 目前只有一台机器受此问题影响(24个CPU内核,24GB Ram)
  • 当"延迟"发生时,CPU根本没有压力
  • 我尝试使用"进程监视器"应用程序来验证当我们"新的Excel.Application()"构造函数(看看是否有任何过多的磁盘/内存/ CPU使用)时会发生什么 - 没有资源限制的迹象.没有与COM对象等相关的日志文件的迹象.
  • 这里唯一的问题是这几分钟的延迟.所有其他Excel Interop命令都照常工作.

主要问题:

  • 有没有办法调试这个Microsoft.Office.Interop.Excel.Application()构造函数,看看哪个部分是一个问题?

外部内容

编辑 - 附加测试

PowerPoint构造函数不受延迟的影响

ppApp = new Microsoft.Office.Interop.PowerPoint.Application();
Run Code Online (Sandbox Code Playgroud)

c# office-interop excel-interop

10
推荐指数
1
解决办法
2253
查看次数

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
查看次数

Microsoft Interop:Excel列名称

我正在使用Microsoft Interop来读取数据.

在excel-sheet中,列名称类似于A,B,C,D,....,AA,AB,....等等.有没有办法阅读这个列名?

如果您需要任何其他信息,请告诉我.

此致,Priyank

c# office-interop excel-interop

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

通过打开Excel窗口将数据从C#写入Excel中断

当我的C#程序将数据连续写入Excel电子表格时,如果最终用户单击右上方菜单并打开Excel选项窗口,则会导致带有HRESULT的System.Runtime.InteropServices.COMException:0x800AC472中断数据被写入到电子表格.

理想情况下,应允许用户执行此操作而不会导致异常.

我发现这个错误代码的唯一解决方案是循环并等待,直到异常消失: HRESULT的异常:0x800AC472 有效地挂起应用程序,数据没有写入Excel,用户对问题一无所知.

我想在写入时禁用Excel的主菜单,但找不到如何执行此操作的参考.

我的应用程序支持Excel 2000到2013.

以下是如何重现该问题:

使用Visual Studio Express 2013 for Windows Desktop,.NET 4.5.1在Windows 7 64位上使用Excel 2007.

创建一个新的Visual C#控制台应用程序项目.

添加对"Microsoft ExceL 12.0对象库"(对于Excel)和"System.Windows.Forms"(对于messagebox)的引用.

这是完整的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading.Tasks;
using System.Threading; // for sleep
using System.IO;
using System.Runtime.InteropServices;
using System.Reflection;
using Microsoft.Win32;
using Excel = Microsoft.Office.Interop.Excel; 

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 3; // there is a split pane at row two
            Excel.Application …
Run Code Online (Sandbox Code Playgroud)

.net c# excel excel-interop

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