2009-06-24 41 views
7

我寫長文(1K到2K個字符長,純XML數據)到Excel工作簿中的單元格。 下面的語句拋出COM錯誤從HRESULT 異常:0x800A03EC使用互操作拋出錯誤在excel工作簿中寫入長文本?

range.set_Value(Type.Missing, data); 

如果我複製粘貼相同的XML手動到Excel,它只是正常工作,但同樣不progamatically工作。 如果我將文本剝離到100/300字符之類的東西,它可以正常工作。

+0

我使用Excel 2010和VSTO 4.0,它並沒有這樣的問題。你在用什麼? – user626528 2012-05-29 08:34:06

+0

@Sean我的答案包含C#代碼,鏈接的文章包含VB代碼,正如您在修訂版3中所要求的那樣。 – StuperUser 2012-05-29 13:19:36

回答

5

有一個限制(如果我沒有記錯的話,在800到900個字符之間有些限制)幾乎不可能像這樣得到解決。

嘗試使用OLE連接以及將所述數據與SQL命令。這可能對你更好。然後您可以使用interop在必要時進行任何格式化。

4

老好人和excel文章:http://support.microsoft.com/kb/316934

下面的代碼更新私有變量,它是成功的行數,並返回一個字符串,它是通向Excel文件。

記住使用PathSystem.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; 

注:這是編輯匆忙,所以可能包含一些錯誤。

5

以下知識庫文章解釋說,最大的限制是911個字符。我在我的代碼上查看了相同的代碼,它可以處理字符串到911個字符。

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

在這篇文章中提到的周圍工作建議,以確保沒有細胞擁有超過911個字符。這是跛腳!

2

要解決此限制,請一次只寫入/更新一個單元格,並立即處理Excel com對象。並重新創建該對象以寫入/更新下一個單元格。

我可以證實這一點的解決方案是在VS2010(VB.NET項目)工作與Microsoft Excel 10.0對象庫文件(Microsoft Office XP)

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 
相關問題