2013-03-25 25 views
0

是否可以使用vb.net中的辦公自動化將數據粘貼到已打開的工作表中? (我使用oledb完成,但速度很慢。)vb .net使用excel automation將數據粘貼到打開的工作簿

 Dim Folder As String = "C:\Users\gm1\Desktop\" 
     Dim Filename As String = "Raw2Eng.xlsx" 
     Dim ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Folder & "\" & Filename & ";Extended Properties=""Excel 12.0;HDR=YES;""" 
     Dim MyConnection As New OleDbConnection(ConnectionString) 

     MyConnection.Open() 
     Dim cmd1 As New OleDbCommand 
     cmd1.Connection = MyConnection 
     cmd1.CommandText = "DROP TABLE [Sheet2$A1:E1027]" 
     cmd1.ExecuteNonQuery() 

     cmd1.CommandText = "CREATE TABLE [Sheet2$A1:E1027] (HiResAngle FLOAT, CH2 FLOAT, CH4 FLOAT, CH5 FLOAT, CH6 FLOAT)" 
     cmd1.ExecuteNonQuery() 

     For j As Integer = 0 To TrimmedSegmentSize - 1 
      sb = New StringBuilder 
      sb.Append("INSERT INTO [Sheet2$A" & 1 & ":E" & j + 1 & "] (HiResAngle, CH2, CH4, CH5, CH6) values ('") 
      sb.Append(eng(i, j, 0)) : sb.Append("' , '") 
      sb.Append(eng(i, j, 1)) : sb.Append("' , '") 
      sb.Append(eng(i, j, 2)) : sb.Append("' , '") 
      sb.Append(eng(i, j, 3)) : sb.Append("' , '") 
      sb.Append(eng(i, j, 4)) : sb.Append("')") 
      cmd1.CommandText = sb.ToString 
      cmd1.ExecuteNonQuery() 
     Next 
     MyConnection.Close() 
+0

看來你有一個surrouding循環(與變量i)。它有什麼作用 ? – 2013-03-25 09:02:27

+0

除了聲明(第1行4),代碼將重複i次。所以輸出會隨着我遍歷3D數組的第一維而變化。謝謝。 – Gergo 2013-03-25 09:18:37

回答

0

OleDb比自動化方式快。 向我們顯示您的代碼,可能會有另一個問題。

[編輯] 如果你真的想使用自動化(因爲要保持工作簿打開),你可以閱讀這篇文章:How to transfer data to an Excel workbook by using Visual Basic .NET

+0

嗨Dude Pascalou。請看我的oledb代碼。我需要覆蓋舊的數據,因爲刪除不允許我drop-create表。代碼工作,但如果工作簿打開,插入1024行大約需要30秒。任何建議如何改善代碼? – Gergo 2013-03-25 09:02:37

+0

嘗試一個封閉的工作簿,可能這就是爲什麼它如此緩慢...... – 2013-03-25 09:34:38

+0

我嘗試關閉工作簿,插入縮短爲2秒。但是我需要在打開的工作簿上進行「實時更新」。 – Gergo 2013-03-25 09:39:26

相關問題