标签: interop

如何在没有安装MS Office的计算机上使用Microsoft.Office.Interop.Excel?

我正在编写一个与excel文件一起使用的应用程序.我需要一个删除工作表的功能.我必须使用程序集Microsoft.Office.Interop.Excel.dll.

它在开发人员计算机上运行良好,但当我尝试在服务器上部署它时,我收到一个错误:

无法加载文件或程序集'office,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = 71e9bce111e9429c'或其中一个依赖项

我知道在计算机上未安装MS Office时会出现问题.客户不希望以任何价格在服务器上安装和购买MS Office.

我按照此处的建议在开发人员计算机上安装"Redistributable Primary Interop Assemblies":http://forums.asp.net/t/1530230.aspx/1 并再次编译我的项目.

代码示例:

public bool DeleteSheet(string tableName)
{
    Excel.Application app = null;
    Excel.Workbooks wbks = null;
    Excel._Workbook _wbk = null;
    Excel.Sheets shs = null;

    bool found = false;

    try
    {
        app = new Excel.Application();
        app.Visible = false;
        app.DisplayAlerts = false;
        app.AlertBeforeOverwriting = false;

        wbks = app.Workbooks;
        _wbk = wbks.Add(xlsfile);
        shs = _wbk.Sheets;
        int nSheets = shs.Count;

        for (int i = 1; i …
Run Code Online (Sandbox Code Playgroud)

c# dll excel interop

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

如何处理名称超过259个字符的文件?

我正在开发一个应用程序,它遍历某些目录中的每个文件,并对这些文件执行一些操作.其中,我必须检索文件大小和修改此文件的日期.

有些文件全名(目录+文件名)太长,我无法使用.NET Framework FileInfo,限制为MAX_PATH(260个字符).许多Web资源建议通过P/Invoke使用本机Win32函数来访问名称太长的文件.

目前,Win32函数似乎出现了完全相同的问题.例如,对于GetFileAttributesEx270字节的路径,(kernel32.dll)失败,Win32错误3 ERROR_PATH_NOT_FOUND.

可以从Notepad2成功打开同一个文件并使用Windows资源管理器成功显示(但Visual Studio 2010例如由于259个字符限制¹而无法打开它).

当文件路径长度为270个字符时,如何才能访问文件?

笔记:

  • 删除或忽略文件路径长度超过259个字符的文件不是解决方案.

  • 我正在寻找仅与Unicode兼容的解决方案.

  • 该应用程序将在安装了.NET Framework 4的Windows 2008/Vista或更高版本下运行.


¹令人惊讶的是,Microsoft Word 2007失败了,在没有任何软盘驱动器的计算机上抱怨"软盘太小",或者在剩下4 GB RAM时"RAM内存很低",或者最后那个"防病毒软件[...]需要更新".他们有一天会停止显示至少在像Microsoft Office这样的关键产品中出现如此愚蠢无意义的错误吗?

c# windows file-io pinvoke interop

65
推荐指数
6
解决办法
6万
查看次数

将一个简单的C#DLL转换为COM互操作组件

如何将C#DLL转换为可由VB6应用程序使用的COM互操作DLL?

.net c# com interop com-interop

65
推荐指数
3
解决办法
7万
查看次数

Excel Interop - 效率和性能

我想知道我可以做些什么来提高Excel自动化的性能,因为如果你在工作表中有很多事情,它可能会很慢......

这里有一些我发现自己:

  • ExcelApp.ScreenUpdating = false - 关闭重绘屏幕

  • ExcelApp.Calculation = Excel.XlCalculation.xlCalculationManual - 关闭计算引擎,以便Excel在单元格值更改时不会自动重新计算(在完成后将其重新打开)

  • 减少对Worksheet.Cells.Item(row, col)和的调用Worksheet.Range- 我不得不轮询数百个单元格以找到我需要的单元格.实现一些单元格位置的缓存,将执行时间从大约40秒减少到大约5秒.

什么样的互操作会对性能造成严重影响,应该避免?你还能做些什么来避免不必要的处理?

c# excel performance interop vsto

62
推荐指数
5
解决办法
3万
查看次数

多个语言如何在一个项目中交互?

我听说有些人在一个项目中用多种语言编程.我无法想象语言如何相互作用.

我的意思是没有类似的Java方法

myProgram.callCfunction(parameters);
Run Code Online (Sandbox Code Playgroud)

永远不会发生或我错了吗?

interop language-interoperability multiple-languages

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

来自HRESULT的异常:0x800A03EC错误

使用以下代码运行Excel加载项时出现"HRESULT:0x800A03EC"错误:

Excel.Range rng = ActiveSheet.Cells[x, y] as Excel.Range;                
string before = rng.Value2; 
string cleanV = System.Text.RegularExpressions.Regex.Replace(before, @"\s+", "");
rng.set_Value(cleanV);
Run Code Online (Sandbox Code Playgroud)

当错误发生时,X和Y设置为1,因此不会违反Excel范围.我进行了广泛的搜索并尝试了多种设置单元格值的方法(例如,Cells [x,y],range.set_Value()),但是为什么会发生这种错误以及如何避免它.

任何帮助是极大的赞赏.

以下是例外情况:


System.Runtime.InteropServices.COMException was unhandled by user code
  HResult=-2146827284
  Message=Exception from HRESULT: 0x800A03EC
  Source=""
  ErrorCode=-2146827284
  StackTrace:
       at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
       at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object value)
       at ImportValidation.ThisAddIn.removeAnySpaces(Int32 x, Int32 y) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 354
       at ImportValidation.ThisAddIn.ReadHeaders(Hashtable columnAddress) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 123
       at ImportValidation.ThisAddIn.mapColumns() in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 493
       at ImportValidation.Ribbon1.button6_Click(Object …
Run Code Online (Sandbox Code Playgroud)

c# excel interop add-in exception

59
推荐指数
3
解决办法
24万
查看次数

如何在Objective-C中提供Swift String枚举?

我有这个带有String值的枚举,它将用于告诉API方法记录服务器消息具有什么样的服务器性.我正在使用Swift 1.2,因此枚举可以映射到Objective-C

@objc enum LogSeverity : String {
    case Debug = "DEBUG"
    case Info = "INFO"
    case Warn = "WARN"
    case Error = "ERROR"
}
Run Code Online (Sandbox Code Playgroud)

我收到了错误

@objc enum raw type String不是整数类型

我没有设法找到任何说只有整数可以从Swift转换为Objective-C的地方.是这样的吗?如果是这样,有没有人有任何关于如何在Objective-C中提供这样的东西的最佳实践建议?

enums interop objective-c swift

58
推荐指数
6
解决办法
4万
查看次数

是否可以从C#.Net调用C函数

我有一个C lib,想从C#应用程序调用这个库中的函数.我尝试通过添加C lib文件作为链接器输入并将源文件添加为附加依赖项来在C lib上创建C++/CLI包装器.

有没有更好的方法来实现这一点,因为我不确定如何将C输出添加到c#应用程序.

我的C代码 -

__declspec(dllexport) unsigned long ConnectSession(unsigned long handle,
                            unsigned char * publicKey,
                            unsigned char   publicKeyLen);
Run Code Online (Sandbox Code Playgroud)

我的CPP包装 -

long MyClass::ConnectSessionWrapper(unsigned long handle,
                                unsigned char * publicKey,
                                unsigned char   publicKeyLen)
    {
        return ConnectSession(handle, publicKey, publicKeyLen);
    }
Run Code Online (Sandbox Code Playgroud)

c interop c#-4.0

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

如何通过Clojure interop访问静态内部Java类?

基本上我需要做的就是这个

FileChannel.MapMode.READ_ONLY
Run Code Online (Sandbox Code Playgroud)

我试着做的很明显

(.. FileChannel MapMode READ_ONLY)
Run Code Online (Sandbox Code Playgroud)

但最终会抛出异常

java.lang.NoSuchFieldException: MapMode
Run Code Online (Sandbox Code Playgroud)

甚至/interop文档中为访问静态字段指定的表示法也会产生相同的异常

(. (FileChannel/MapMode) READ_ONLY)
Run Code Online (Sandbox Code Playgroud)

java interop clojure

54
推荐指数
2
解决办法
7520
查看次数

什么是互操作dll?

我需要一些澄清.我有一个使用Crystal Reports的Reportwriter dll.它是用VB6编写的.我必须将这个dll添加到我的asp.net项目中,它创建一个interop dll.

根据我的理解,interop dll作为中介,以便我的.net代码可以与Reportwriter dll通信.

那么我注册interop dll还是注册原始dll?

asp.net interop crystal-reports

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