标签: office-interop

使用Office Interop将单元格写入Excel的最快方法?

我正在编写一个函数,使用VB .NET中的Office Interop将数据导出到Excel.我目前正在使用Excel工作表的Cells()方法直接编写单元格:

worksheet.Cells(rowIndex, colIndex) = data(rowIndex)(colIndex)
Run Code Online (Sandbox Code Playgroud)

这需要很长时间才能获得大量数据.是否有更快的方法可以立即将大量数据写入Excel?用范围做事会更快吗?

vb.net com excel performance office-interop

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

支持Office Automation的不同Office版本

我们创建了一个使用Office 2007(Excel 2007)从Excel工作表读取数据的应用程序.然而.我注意到,当我想在安装了Office 2003的系统上部署应用程序时,它会崩溃,因为此版本的办公室需要引用其他PIA(和其他dll).

我是否需要编译不同版本的应用程序才能支持不同版本的Office或者是否有更优雅的解决方案来解决此问题?

我使用Visual Studio 2010(C#)和.Net 4.0平台.

.net c# office-interop

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

使用Microsoft.Office.Interop.Excel从excel 2010读取数据

我无法在Excel中读取数据.这是我正在使用的代码:

using Excel = Microsoft.Office.Interop.Excel;

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"Book1.xlsx", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel._Worksheet xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;

int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;

for (int i = 1; i <= rowCount; i++)
{
    for (int j = 1; j <= colCount; j++)
    {
        MessageBox.Show(xlWorksheet.Cells[i,j].ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个消息框,说明了一些System.__ComObject值而不是值.
我怎样才能解决这个问题?

.net c# excel office-interop

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

如何快速将对象[,]上传到double [,]?

我使用Microsoft.Office.Interop.Excel我返回一个object[,]包含double元素的2D数组类型.请注意,索引下限1不是默认值0,但我可以轻松处理.

如何很好地将数组转换为double[,]使用.NET 3.5.(很好地,我的意思是简洁,或紧凑).

注意

double[] values_2 = values.Cast<double>().ToArray();
Run Code Online (Sandbox Code Playgroud)

确实有效,但它通过阵列变平为一维结构.

c# vb.net office-interop

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

检测受密码保护的文档

有没有办法知道即使在打开文件之前doc/ ppt/ xls文件是否受密码保护?

.net c# vsto office-interop

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

在C#中正确处理COM互操作对象,尤其是MS Office应用程序

我正在开发一个严重依赖多个Microsoft Office产品的应用程序,包括Access,Excel,Word,PowerPoint和Outlook等.在对互操作进行研究时,我发现从VS2010和.NET 4开始,我们感谢不再需要经历PIA的噩梦.

此外,我一直在阅读很多关于正确处理物品的文章,最明智的就是这个.

然而,这篇文章已有5年历史,关于AFAIK这一主题的权威出版物并不多.以下是上述链接的代码示例:

' Cleanup:
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()

Marshal.FinalReleaseComObject(worksheet)

oWB.Close(SaveChanges:=False)
Marshal.FinalReleaseComObject(workbook)

oApp.Quit()
Marshal.FinalReleaseComObject(application)
Run Code Online (Sandbox Code Playgroud)

我想知道的是今天的标准,如果我希望在未来几年支持我的申请,我应该注意什么?

更新:一些可靠文章的链接将受到高度赞赏.顺便说一句,这不是服务器端应用程序.这将在计算机实验室中运行,我们让用户与我们实例化的办公产品进行交互.

发现它: 这篇由三部分组成的文章可能是最接近我期望找到的权威帐户的文章.

.net c# garbage-collection ms-office office-interop

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

如何使用预先填充的附件打开Outlook的新邮件窗口

当用户点击我的应用程序中的某个按钮或链接时,我需要打开一个带有预填充附件的新电子邮件窗口.

outlook office-interop outlook-addin outlook-2010 c#-4.0

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

接口无法实例化,但这是一个例外

看到我实际上必须实例化一个接口以在C#中使用Word Interoop后,我感到非常惊讶.

Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
Run Code Online (Sandbox Code Playgroud)

Microsoft.Office.Interop.Word.Application按什么它的XML文档说是一个接口:

在此输入图像描述

怎么可能,视觉工作室把它与别的东西混淆了?或者是什么允许实例化这个接口?

c# com interface office-interop

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

如何在c#中运行时连接到Outlook 2010?

我想要做的是向winform客户端添加一个"Email To ..."按钮,该客户端打开一个新的Outlook邮件窗口并附加一个文件,以便用户可以转发它.如果outlook还没有运行,我可以让outlook集成工作得很好.这是一个C#.NET 4.0 winforms应用程序,使用Outlook 14.0互操作库,在Windows 7 64位计算机上运行Outlook 2010 32位.由于其他原因,我已将应用程序编译为x86,因此我怀疑它是32/64位问题.这是我的代码:

// Connect to outlook and create a new mail item
var app = new Outlook.Application();
var ns = app.GetNamespace("MAPI");
var mailItem = (Outlook.MailItem)ns.Application.CreateItem(Outlook.OlItemType.olMailItem);

// create the mail item and attach the file
mailItem.To = "";
mailItem.Subject = "Emailing: " + Path.GetFileName(_currentFilePath);
mailItem.Attachments.Add(_currentFilePath, Outlook.OlAttachmentType.olEmbeddeditem);

// show the email dialog window
mailItem.Display(true);
Run Code Online (Sandbox Code Playgroud)

如果outlook没有运行,它可以完美运行.一旦打开,我在第一行尝试创建Outlook.Application对象时收到以下错误:

由于以下错误,检索具有CLSID {0006F03A-0000-0000-C000-000000000046}的组件的COM类工厂失败:80080005服务器执行失败(HRESULT异常:0x80080005(CO_E_SERVER_EXEC_FAILURE)).

任何想法会导致什么?这是某种版本的冲突吗?

email-integration ms-office office-interop outlook-object-model winforms-interop

12
推荐指数
2
解决办法
7158
查看次数

如何在不显示Excel互操作的保存对话框的情况下保存工作簿?

我必须创建一个导出DataSet到Excel 的控制台应用程序.问题是它不应该弹出保存窗口,它应该自动创建Excel文件.到目前为止,我有以下代码,但我不知道如何自动保存.非常感谢任何帮助.

public static void CreateWorkbook(DataSet ds, String path)
{
    int rowindex = 0;
    int columnindex = 0;

    Microsoft.Office.Interop.Excel.Application wapp = new Microsoft.Office.Interop.Excel.Application();
    Microsoft.Office.Interop.Excel.Worksheet wsheet;
    Microsoft.Office.Interop.Excel.Workbook wbook;

    wapp.Visible = false;

    wbook = wapp.Workbooks.Add(true);
    wsheet = (Worksheet)wbook.ActiveSheet;

    try
    {
        for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
        {
            wsheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;

        }

        foreach (DataRow row in ds.Tables[0].Rows)
        {
            rowindex++;
            columnindex = 0;
            foreach (DataColumn col in ds.Tables[0].Columns)
            {
                columnindex++;
                wsheet.Cells[rowindex + 1, columnindex] = row[col.ColumnName]; …
Run Code Online (Sandbox Code Playgroud)

.net c# excel save office-interop

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