我正在将长文本(1K 到 2K 字符长,纯 xml 数据)写入 excel 工作簿中的单元格。以下语句从 HRESULT 引发 COM 错误异常:0x800A03EC
range.set_Value(Type.Missing, data);
如果我手动将相同的 xml 复制粘贴到 excel 中,它就可以正常工作,但同样不能以编程方式工作。如果我将文本剥离为 100/300 个字符,它可以正常工作。
我正在将长文本(1K 到 2K 字符长,纯 xml 数据)写入 excel 工作簿中的单元格。以下语句从 HRESULT 引发 COM 错误异常:0x800A03EC
range.set_Value(Type.Missing, data);
如果我手动将相同的 xml 复制粘贴到 excel 中,它就可以正常工作,但同样不能以编程方式工作。如果我将文本剥离为 100/300 个字符,它可以正常工作。
有一个限制(如果我没记错的话,大约在 800 到 900 个字符之间)几乎不可能像这样绕过。
尝试使用 ole 连接并使用 SQL 命令插入数据。这可能对你更有效。然后,如有必要,您可以使用互操作进行任何格式化。
以下知识库文章解释了最大限制为 911 个字符。我在我的代码上检查了相同的内容,它适用于最多 911 个字符的字符串。
http://support.microsoft.com/kb/818808
本文中提到的解决方法建议确保没有单元格包含超过 911 个字符。那太蹩脚了!
好的 Ole 和 excel 文章:http://support.microsoft.com/kb/316934
下面的代码更新了一个私有变量,它是成功的行数,并返回一个字符串,它是 excel 文件的路径。
记得使用Path
from 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 编辑匆忙,可能有一些错误。
为了解决这个限制,一次只写入/更新一个单元格并立即处理 Excel com 对象。并再次重新创建对象以写入/更新下一个单元格。
我可以确认此解决方案在 VS2010(VB.NET 项目)中使用 Microsoft Excel 10.0 对象库(Microsoft Office XP)
首先我会说我自己没有尝试过,但我的研究表明您可以使用 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)。
此限制应该已在 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