我寫長文(1K到2K個字符長,純XML數據)到Excel工作簿中的單元格。 下面的語句拋出COM錯誤從HRESULT 異常:0x800A03EC使用互操作拋出錯誤在excel工作簿中寫入長文本?
range.set_Value(Type.Missing, data);
如果我複製粘貼相同的XML手動到Excel,它只是正常工作,但同樣不progamatically工作。 如果我將文本剝離到100/300字符之類的東西,它可以正常工作。
我寫長文(1K到2K個字符長,純XML數據)到Excel工作簿中的單元格。 下面的語句拋出COM錯誤從HRESULT 異常:0x800A03EC使用互操作拋出錯誤在excel工作簿中寫入長文本?
range.set_Value(Type.Missing, data);
如果我複製粘貼相同的XML手動到Excel,它只是正常工作,但同樣不progamatically工作。 如果我將文本剝離到100/300字符之類的東西,它可以正常工作。
有一個限制(如果我沒有記錯的話,在800到900個字符之間有些限制)幾乎不可能像這樣得到解決。
嘗試使用OLE連接以及將所述數據與SQL命令。這可能對你更好。然後您可以使用interop在必要時進行任何格式化。
老好人和excel文章:http://support.microsoft.com/kb/316934
下面的代碼更新私有變量,它是成功的行數,並返回一個字符串,它是通向Excel文件。
記住使用Path
從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;
注:這是編輯匆忙,所以可能包含一些錯誤。
以下知識庫文章解釋說,最大的限制是911個字符。我在我的代碼上查看了相同的代碼,它可以處理字符串到911個字符。
http://support.microsoft.com/kb/818808
在這篇文章中提到的周圍工作建議,以確保沒有細胞擁有超過911個字符。這是跛腳!
要解決此限制,請一次只寫入/更新一個單元格,並立即處理Excel com對象。並重新創建該對象以寫入/更新下一個單元格。
我可以證實這一點的解決方案是在VS2010(VB.NET項目)工作與Microsoft Excel 10.0對象庫文件(Microsoft Office XP)
這種限制應該已經在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
,我會說我沒有這個嘗試我自己,但我的研究說,你可以使用QueryTables克服了911個字符的限制開始。
這是我發現的主要文章,它討論瞭如何使用記錄集作爲QueryTable的數據源並將其添加到電子表格:http://www.excelforum.com/showthread.php?t=556493&p=1695670&viewfull=1#post1695670。
以下是使用QueryTables的一些示例C#代碼:import txt files using excel interop in C# (QueryTables.Add)。
我使用Excel 2010和VSTO 4.0,它並沒有這樣的問題。你在用什麼? – user626528 2012-05-29 08:34:06
@Sean我的答案包含C#代碼,鏈接的文章包含VB代碼,正如您在修訂版3中所要求的那樣。 – StuperUser 2012-05-29 13:19:36