7

我正在将长文本(1K 到 2K 字符长,纯 xml 数据)写入 excel 工作簿中的单元格。以下语句从 HRESULT 引发 COM 错误异常:0x800A03EC

range.set_Value(Type.Missing, data);

如果我手动将相同的 xml 复制粘贴到 excel 中,它就可以正常工作,但同样不能以编程方式工作。如果我将文本剥离为 100/300 个字符,它可以正常工作。

4

6 回答 6

5

有一个限制(如果我没记错的话,大约在 800 到 900 个字符之间)几乎不可能像这样绕过。

尝试使用 ole 连接并使用 SQL 命令插入数据。这可能对你更有效。然后,如有必要,您可以使用互操作进行任何格式化。

于 2009-06-24T08:54:30.847 回答
5

以下知识库文章解释了最大限制为 911 个字符。我在我的代码上检查了相同的内容,它适用于最多 911 个字符的字符串。

http://support.microsoft.com/kb/818808

本文中提到的解决方法建议确保没有单元格包含超过 911 个字符。那太蹩脚了!

于 2009-06-24T10:08:02.400 回答
4

好的 Ole 和 excel 文章:http://support.microsoft.com/kb/316934

下面的代码更新了一个私有变量,它是成功的行数,并返回一个字符串,它是 excel 文件的路径。

记得使用Pathfrom System.IO;

string tempXlsFilePathName; string result = new string;

        string sheetName;
        string queryString;

        int successCounter;

        // set sheetName and queryString
        sheetName = "sheetName";
        queryString = "CREATE TABLE " + sheetName + "([columnTitle] char(255))";

        // Write .xls
        successCounter = 0;
        tempXlsFilePathName = (_tempXlsFilePath + @"\literalFilename.xls");
        using (OleDbConnection connection = new OleDbConnection(GetConnectionString(tempXlsFilePathName)))
        {
            OleDbCommand command = new OleDbCommand(queryString, connection);
            connection.Open();
            command.ExecuteNonQuery();

            yourCollection.ForEach(dataItem=>
            {
                string SQL = "INSERT INTO [" + sheetName + "$] VALUES ('" + dataItem.ToString() + "')";
                OleDbCommand updateCommand = new OleDbCommand(SQL, connection);
                updateCommand.ExecuteNonQuery();
                successCounter++;
            }
            );

            // update result with successfully written username filepath
            result = tempXlsFilePathName;
        }

        _successfulRowsCount = successCounter;
        return result;

NB 编辑匆忙,可能有一些错误。

于 2009-06-24T09:12:02.137 回答
2

为了解决这个限制,一次只写入/更新一个单元格并立即处理 Excel com 对象。并再次重新创建对象以写入/更新下一个单元格。

我可以确认此解决方案在 VS2010(VB.NET 项目)中使用 Microsoft Excel 10.0 对象库(Microsoft Office XP)

于 2012-05-28T07:19:38.880 回答
0

首先我会说我自己没有尝试过,但我的研究表明您可以使用 QueryTables 来克服 911 字符的限制。

这是我发现的主要帖子,其中讨论了使用记录集作为 QueryTable 的数据源并将其添加到电子表格中:http ://www.excelforum.com/showthread.php?t=556493&p=1695670&viewfull=1#邮政1695670

下面是一些使用 QueryTables 的示例 C# 代码:import txt files using excel interop in C# (QueryTables.Add)

于 2012-06-01T18:16:10.333 回答
0

此限制应该已在 Excel 2007/2010 中删除。使用 VBA 以下工作

Sub longstr()
    Dim str1 As String
    Dim str2 As String
    Dim j As Long

    For j = 1 To 2000
        str1 = str1 & "a"
    Next j
    Range("a1:a5").Value2 = str1
    str2 = Range("a5").Value2
    MsgBox Len(str2)
End Sub
于 2012-05-29T07:42:49.513 回答