标签: excel-interop

Excel 之上的 Windows 窗体

我有一个从用 VSTO 编写的 Excel 加载项生成的表单。我希望表单始终保留在 Excel 电子表格上方,但仍允许用户与其下方的工作表进行交互。

表单构造函数包括this.TopLevel = true;,但当我选择一个单元格时,表单仍然消失在电子表格后面。

有其他人遇到过这个问题并找到解决方法吗?

c# vsto excel-interop winforms

5
推荐指数
1
解决办法
924
查看次数

DCOM 配置中缺少 Microsoft Excel 应用程序条目

DCOM 配置中不存在“Microsoft Excel 应用程序”条目(在 32 位和 64 位中都尝试过)。我怎样才能让它显示在那里?我安装了 Microsoft Office。

c# dcom com-interop office-interop excel-interop

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

如何将 Microsoft Office 互操作与 Azure 应用服务结合使用

如何将 Microsoft Office Inter-op 与 Azure 应用服务结合使用 Microsoft Office Inter-op 在 Azure 应用服务中是否正常工作。如果是,请告诉我。

azure excel-interop azure-web-app-service

5
推荐指数
1
解决办法
4124
查看次数

我们无法在.NET 4.0中的通用对象中使用Interop对象吗?

我正在使用VS 2010并致力于将我们的应用程序升级到.NET 4.该应用程序是以Excel为基础构建的,我们希望利用.NET的一些改进来使用Excel.但是我遇到了一个奇怪的错误,这个错误似乎是在通用字典中使用Excel Interop对象引起的.这是生成的错误:

C:\MyApp\TheAssembly\MyClass.cs(823,57): 
error CS1769: Type 'MyApp\OtherAssemply.IMyController.SheetReports' from assembly 'c:\MyApp\OtherAssemply.\bin\Debug\OtherAssembly.dll' 
 cannot be used across assembly boundaries because it has a generic type 
 parameter that is an embedded interop type.
Run Code Online (Sandbox Code Playgroud)

这是有问题的实际属性:

Dictionary<Excel.Worksheet, IReportSheet> SheetReports { get;}
Run Code Online (Sandbox Code Playgroud)

我们无法在通用对象中使用Interop对象吗?如果是这样,这是.NET 4.0中的严重限制.我尝试将Embed Interop属性设置为false,但这似乎没有改变任何东西.如果有任何解决方法,请告诉我.

excel .net-4.0 excel-interop

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

从Excel Application对象中查找位(32位/ 64位)?

是否可以从Microsoft.Office.Interop.Excel.ApplicationClass确定Excel是以32位还是64位运行?

编辑
该解决方案应适用于Excel 2010和Excel 2007

.net excel excel-interop 32bit-64bit

4
推荐指数
1
解决办法
2942
查看次数

C#Excel Interop:如何"获取"工作表中已有的表格?

我的工作表有很多表.我需要特别操纵一个.当然,我可以简单地查看它的单元格数并逐个单元地操作它,但是有没有"get"函数以编程方式"获取"表格?

如果是这样,那我怎么操纵细胞呢?是否有命令"获取"整个标题,或整个列的标题(而不是其列号)/

如果有人知道解释这个的指南,那就足够了.我尝试使用谷歌搜索它,但所有结果都是关于数据库表,即从数据库填充电子表格.

c# excel-interop

4
推荐指数
1
解决办法
3497
查看次数

使用c#写入现有Excel文件

我试图打开(或创建一个新的xls)Excel文件并为其写一些值.虽然,如果我只是创建一个新的xls文件,下面的程序工作得很好,我遇到了一些问题

**mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);**
Run Code Online (Sandbox Code Playgroud)

这是错误:无法访问"LOG.xls".该文件可能已损坏,位于未响应的服务器上,或者只读.它不是只读的,它没有被破坏(因为有时文件是在运行时创建的).那有什么问题呢?

private static Microsoft.Office.Interop.Excel.Workbook mWorkBook;
    private static Microsoft.Office.Interop.Excel.Sheets mWorkSheets;
    private static Microsoft.Office.Interop.Excel.Worksheet mWSheet1;
    private static Microsoft.Office.Interop.Excel.Application oXL;

    private void btnSignIn_Click ( object sender, EventArgs e )
    {

        string path = "D:\\LOG.xls";
        if(!File.Exists(path))
        {
            File.Create (path);
        }


        oXL = new Microsoft.Office.Interop.Excel.Application ();
        oXL.Visible = true;
        oXL.DisplayAlerts = false;
        //error on this line
        mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, …
Run Code Online (Sandbox Code Playgroud)

c# interop office-interop excel-interop

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

为什么杀掉Excel进程是个坏事?

我已经看过很多文章和问题,关于如何确保Excel实际上在你想要的时候退出并且这个过程不能保持活力.这是一篇描述该问题的知识库文章和Microsoft推荐的解决方案.实质上:

'close files

'Quit Excel
xlApp.quit()

'Release and collect garbage
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp)
GC.Collect()
GC.WaitForPendingFinalizers()
Run Code Online (Sandbox Code Playgroud)

很多人不建议杀死这个过程; 请参见 如何正确清理Excel互操作对象了解.net中的垃圾收集

另一方面,许多人不建议使用GC.Collect.请参阅使用GC.Collect()有什么错误?

根据我的经验,杀死该过程是确保Excel消失的最快速,最简单的方法.我的代码只会杀死它启动的确切进程,而不会杀死其他进程.我确保关闭所有打开的工作簿,退出应用程序并释放xlApp对象.最后,我检查过程是否仍然存在,如果是,那么杀死它.

<System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, _
ByRef lpdwProcessId As Integer) As Integer
    End Function

Sub testKill()

    'start the application
    Dim xlApp As Object = CreateObject("Excel.Application")

    'do some work with Excel

    'close any open files

    'get the window handle
    Dim xlHWND As Integer = xlApp.hwnd

    'this will have the process ID …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net excel excel-interop

4
推荐指数
1
解决办法
2017
查看次数

将Excel图表导出为图像

我编写了以下简单的C#控制台应用程序来导出Excel工作簿中的所有图表.它工作得很好,除非打开文档后没有滚动到图表,在这种情况下会生成一个空图像文件.

using Excel = Microsoft.Office.Interop.Excel;
using System;
using System.Diagnostics;

namespace ExcelExporter
{
    class ChartExporter
    {
        const string EXPORT_TO_DIRECTORY = @"C:\Users\Sandy\Desktop\Excel\Charts";

        static void Main(string[] args)
        {
            Excel.Application app = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Microsoft.Office.Interop.Excel.Application;

            ConsoleColor c = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write("Export To: ");
            Console.ForegroundColor = c;
            string exportPath = Console.ReadLine();

            if (exportPath == "")
                exportPath = EXPORT_TO_DIRECTORY;

            Excel.Workbook wb = app.ActiveWorkbook;

            foreach (Excel.Worksheet ws in wb.Worksheets)
            {
                Excel.ChartObjects chartObjects = (Excel.ChartObjects)(ws.ChartObjects(Type.Missing));

                foreach (Excel.ChartObject co in chartObjects)
                {
                    Excel.Chart chart = …
Run Code Online (Sandbox Code Playgroud)

c# excel export excel-interop

4
推荐指数
1
解决办法
6937
查看次数

以编程方式更改评论框的大小

我可以使用Range.AddComment方法以编程方式在C#中向Excel单元格添加注释:

range.Cells[1, 1].AddComment("Hello World!");
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要添加的一些评论很长.在我的测试过程中,无论评论有多长,评论框似乎都保持默认大小.这意味着用户在最初单击单元格时无法看到所有注释.

有没有一种方法可以用来更好地控制注释的显示方式,这样我可以避免这个问题?

c# excel excel-interop

4
推荐指数
1
解决办法
1496
查看次数