2009-06-24 36 views
7

Tôi đang viết văn bản dài (1K đến 2K ký tự, dữ liệu xml thuần túy) vào một ô trong sổ làm việc excel. Những tuyên bố dưới đây ném COM lỗi ngoại lệ từ HRESULT: 0x800A03ECviết văn bản dài trong sổ làm việc excel bằng cách sử dụng interop ném lỗi?

range.set_Value(Type.Missing, data); 

Nếu tôi sao chép dán xml cùng bằng tay vào excel nó chỉ hoạt động tốt, nhưng cùng không hoạt động progamatically. Nếu tôi bỏ đoạn văn bản thành khoảng 100/300 ký tự thì nó hoạt động tốt.

+0

Tôi đang sử dụng Excel 2010 và VSTO 4.0 và nó không có vấn đề như vậy. Những gì bạn đang sử dụng? – user626528

+0

@Sean câu trả lời của tôi chứa mã C# và bài viết được liên kết có chứa mã VB, như bạn đã yêu cầu trong bản sửa đổi 3. – StuperUser

+0

Suy nghĩ ban đầu của tôi là chia dữ liệu thành một số ô khác nhau (nói 100/300 ký tự mỗi) và sau đó hợp nhất những ... Làm việc cẩu thả xung quanh, nhưng tôi nghĩ nó có thể hoạt động – Ortund

Trả lời

5

Có giới hạn (một số giữa 800 và 900 ký tự nếu tôi nhớ chính xác) gần như không thể đi lại như thế này.

Thử sử dụng kết nối ole và chèn dữ liệu bằng lệnh SQL. Điều đó có thể làm việc tốt hơn cho bạn. sau đó bạn có thể sử dụng interop để thực hiện bất kỳ định dạng nào nếu cần.

+4

yep, Giới hạn là 911 ký tự. Bạn không chắc chắn giải pháp này là gì. – dotnetcoder

4

Tốt Ole và excel bài viết: http://support.microsoft.com/kb/316934

Các mã sau đây cập nhật một biến tin đó là số hàng thành công và trả về một chuỗi đó là đường dẫn đến file excel.

Hãy nhớ sử dụng Path từ 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; 

N.B. Điều này đã được chỉnh sửa trong một vội vàng, vì vậy có thể chứa một số sai lầm.

5

bài viết KB sau giải thích rằng giới hạn tối đa là 911 ký tự. Tôi kiểm tra tương tự trên mã của tôi nó làm việc cho chuỗi tối đa 911 ký tự.

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

Công việc xung quanh đề cập trong bài viết này khuyến cáo để đảm bảo không tế bào giữ hơn 911 ký tự. thats lame!

2

Để giải quyết giới hạn này, chỉ viết/cập nhật một ô tại một thời điểm và bỏ đối tượng com Excel ngay lập tức. Và tái tạo lại đối tượng để viết/cập nhật ô kế tiếp.

Tôi có thể khẳng định giải pháp này đang làm việc trong VS2010 (dự án VB.NET) với Microsoft Excel 10.0 Object Library (Microsoft Office XP)

0

Hạn chế này được cho là đã được gỡ bỏ trong Excel 2007/2010. Sử dụng VBA sau đây làm việc

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 
0

Tôi sẽ bắt đầu bằng cách nói rằng tôi đã không cố gắng này bản thân mình, nhưng nghiên cứu của tôi nói rằng bạn có thể sử dụng QueryTables để vượt qua những giới hạn 911 kí tự.

Đây là bài đăng chính tôi tìm thấy nói về việc sử dụng bộ bản ghi làm nguồn dữ liệu cho QueryTable và thêm nó vào bảng tính: http://www.excelforum.com/showthread.php?t=556493&p=1695670&viewfull=1#post1695670.

Dưới đây là một số mẫu C# mã sử dụng QueryTables: import txt files using excel interop in C# (QueryTables.Add).

Các vấn đề liên quan