标签: excel-interop

如何将两个excel文件与其工作表名称合并为一个?

为了合并两个 Excel 表,我使用了下面的代码。

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

namespace MergeWorkBooks
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application app = new Excel.Application();

            app.Visible = true;
            app.Workbooks.Add("");
            app.Workbooks.Add(@"c:\MyWork\WorkBook1.xls");
            app.Workbooks.Add(@"c:\MyWork\WorkBook2.xls");


            for (int i = 2; i <= app.Workbooks.Count; i++)
            {
                int count = app.Workbooks[i].Worksheets.Count;

                app.Workbooks[i].Activate();
                for (int j=1; j <= count; j++)
                {
                    Excel._Worksheet ws = (Excel._Worksheet)app.Workbooks[i].Worksheets[j];
                    ws.Select(Type.Missing);
                    ws.Cells.Select();

                    Excel.Range sel = (Excel.Range)app.Selection;
                    sel.Copy(Type.Missing);

                    Excel._Worksheet sheet = (Excel._Worksheet)app.Workbooks[1].Worksheets.Add(
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing
                    );

                    sheet.Paste(Type.Missing, Type.Missing);

                }
            } …
Run Code Online (Sandbox Code Playgroud)

c# excel excel-interop

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

Microsoft.Office.Interop.Excel 或 EPPlus 用于读取巨大的(或不是)Excel 文件

我编写了一个代码来从 Excel 文件中读取一列。我在此使用 Microsoft.Office.Interop.Excel,首先读取整个范围,然后写入 System.Array,然后对 System.Array 值进行一些操作,最后将其转换为 List,因为我填充了一个 ListBox 元素。这是代码(仅相关部分):

private List<string> bd = new List<string>();
private static System.Array objRowAValues;

private List<string> bl = new List<string>();
private static System.Array objRowBValues;

private List<string> cm = new List<string>();
private static System.Array objRowCValues;

private List<string> pl = new List<string>();
private List<string> bdCleanList;
private static Microsoft.Office.Interop.Excel.Application appExcel;

Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range rngARowLast, rngBRowLast, rngCRowLast;

long lastACell, lastBCell, lastCCell, fullRow;

private void btnCargarExcel_Click(object sender, EventArgs e)
    {
        if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
        { …
Run Code Online (Sandbox Code Playgroud)

.net c# excel-interop epplus

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

Excel 互操作另存为在 excel 2007 中提供兼容性检查器

这是我的SaveAs方法代码:

m_FilePath="D:\Build\abc.xlsx"
m_objOpt=System.Reflection.Missing.Value;
m_objBook.SaveAs(m_FilePath, m_objOpt, m_objOpt,
    m_objOpt, m_objOpt, m_objOpt, XlSaveAsAccessMode.xlShared,
    m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
Run Code Online (Sandbox Code Playgroud)

现在我的问题不是如何禁用兼容性检查器,这已经被多次回答了。我的问题是为什么兼容性检查器会出现。excel怎么知道文件有excel 2003的痕迹。D:\Build是空的。

c# excel excel-interop

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

如果管理员用户已注销,服务器上的 Excel 应用程序将无法工作

我有一个 ASP.NET 应用程序,它使用 Microsoft intrope 程序集来读取、写入和修改 excel 文件,它在服务器计算机上使用 Excel 2013。如果我以管理员身份登录到服务器机器,应用程序工作正常,但是当我注销时,应用程序无法初始化 Excel 应用程序。这是例外。

System.Runtime.InteropServices.COMException (0x8000401A)
Run Code Online (Sandbox Code Playgroud)

应用程序在带有 MS Excel 2013 32 位的 Windows Server 2008R2 上运行我无法找出这种行为的原因。这是关于 COM 对象安全选项还是与 IIS 权限有关?

excel iis-7 excel-interop windows-server-2008-r2

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

运算符“==”不能应用于“System.DBNull”和“Int”类型的操作数

我在尝试与 Excel 文档建立连接以更改所有没有填充的行的颜色时收到此错误。

我已阅读错误日志,它指出我的错误位于以下代码部分:

try
{
    foreach (Excel.Range row in rows)
    {
        if (row.Cells.EntireRow.Interior.ColorIndex == -4142) //error is Here
        {
            row.Interior.Color = System.Drawing.Color.Red;
        }
    }
    workbook.Save();
    workbook.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(worksheet);
Marshal.ReleaseComObject(application);
Run Code Online (Sandbox Code Playgroud)

有谁知道是什么导致了这个错误,如果是的话如何解决它?

c# error-handling excel-interop

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

在Excel文件中设置表格的范围

我正在Microsoft Dynamics AX 2009中生成Excel文件.我想从第9行在Excel中创建一个表.即使我设置了一个范围,表格总是显示在单元格A1上.

SysExcelRange           xlsRange;
SysExcelListObject      listObj;
#define.ListObjectName("xlGuess")
Run Code Online (Sandbox Code Playgroud)

...

xlsRange = xlsWorkSheet.range("A9");
listObj = xlsWorkSheet.listObjects().add(xlsRange, #ListObjectName);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我也尝试设置全范围如"A9:E13"和"A9:A13",但它也没有用.也许,它可以用COM对象来做,但我无法实现它.为什么它不起作用?

excel x++ axapta excel-interop dynamics-ax-2009

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

为什么在关闭表单之前调用 FormDeactivate?

我有一个使用 Excel Interop 生成 Excel 电子表格的 Winforms 应用程序。

当我尝试以这种方式保存工作表时:

_xlBook.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Run Code Online (Sandbox Code Playgroud)

...它会失败,告诉我,“ System.Runtime.InteropServices.InvalidComObjectException 未处理 HResult=-2146233049 Message=COM 对象已与其底层 RCW 分离,无法使用。

不过,这没有多大意义——我并没有对线程之类的东西做任何花哨的事情;这是一个非常简单的香草实用程序。代码中唯一引用 _xlBook 的其他地方是:

1)

private Excel.Workbook _xlBook;
Run Code Online (Sandbox Code Playgroud)

2)

_xlBook = _xlApp.Workbooks.Add(Type.Missing);
Run Code Online (Sandbox Code Playgroud)

3)

_xlSheets = _xlBook.Worksheets;
_xlSheet = (Excel.Worksheet)_xlSheets.Item[1];
Run Code Online (Sandbox Code Playgroud)

4)

_xlBook.Close(false);
Marshal.ReleaseComObject(_xlBook);
Run Code Online (Sandbox Code Playgroud)

_xlBook 被处理的最后一部分是从表单的 Deactivate 事件调用的,它是:

private void FormMain_Deactivate(object sender, EventArgs e)
{
    DeinitializeExcelObjects();
}
Run Code Online (Sandbox Code Playgroud)

问题是(我在所有引用 _xlBook 的地方放置断点后发现的)FormMain_Deactivate() 在 _xlBook.SaveAs() 被调用之前被调用,当点击“运行”按钮时调用。

一旦我在 FormMain_Deactivate() 中注释掉对 DeinitializeExcelObjects() 的调用,并在调用 _xlBook.SaveAs() 之后立即调用它,它就可以正常工作 - …

c# excel-interop winforms-interop winforms

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

C# - Microsoft.Office.Interop.Excel.Sheets到Microsoft.Office.Interop.Excel.Worksheet []

我正在尝试创建一个WorksheetExcel文件的数组,但我找不到正确的演员.

这是代码:

Excel.Application app = new Excel.Application();
Excel.Workbook book = app.Workbooks.Open(pathFile);
int numSheet = book.Worksheets.Count;
Excel.Worksheet[] sheets = new Excel.Worksheet[numSheet];
sheets = (Excel.Worksheet[])book.Worksheets;
Run Code Online (Sandbox Code Playgroud)

正如您从代码中看到的那样,我尝试使用该演员,但这是多余的.我该如何解决这个问题?

c# excel excel-interop

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

C#excel互操作公式拖动

我正在使用C#excel互操作框架自动为我的公司生成一堆报告,我想知道是否有人知道如何使用此方法拖动方程式.

如果我能用命名范围做到这一点,那就更好了,但是即使我必须对行进行硬编码,所以它沿着A10:J10向下线A20:J20这样做可能没问题.

即使是任何指向如何做到这一点的网页的指针也会非常感激,因为我有点困在这个上面.

谢谢!

c# excel-interop

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

Excel Interop SaveAs()与巨大的电子表格数据挂起

我尝试使用SaveAs()来保存Excel电子表格数据(包含8张纸,一些包含15000行的纸张),但SaveAS()永远不会返回.如果我删除一些工作表,它将成功保存到硬盘文件.有没有办法可以保存整个巨大的电子表格而不挂?

非常感谢.

///////// my c# code to save Excel data:
xlWorkBook.SaveAs(outFileName,
                  Excel.XlFileFormat.xlWorkbookNormal,
                  Type.Missing,
                  Type.Missing,
                  false,
                  false,
                  Excel.XlSaveAsAccessMode.xlExclusive,
                  false,
                  false,
                  Type.Missing,
                  Type.Missing,
                  Type.Missing);

xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
Run Code Online (Sandbox Code Playgroud)

c# excel excel-interop

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