2012-01-20 105 views
2

我需要多次以編程方式將行插入到Excel電子表格中。我需要實際上插入一個新行而不是插入數據,也就是說,我需要將所有其他行向下移動一個。通過C#和OleDb將行插入到Excel電子表格中

我目前使用OLEDB插入數據本身,像這樣:

//Note I have missed some code out for simplicities sake, this all works fine however 
OleDbConnection oledbConn = null; 

OleDbCommand cmd = null; 

OleDbConnection = new OleDbConnection(connString);   
OleDbConnection.Open(); 

string connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0; \"", TargetFile); 

sting InsertCommand = string.Format("INSERT INTO [{0}${1}:{1}] Values({2})", WorksheetName, Coord, valuestring); 

cmd = new OleDbCommand(InsertCommand, oledbConn); 

cmd.ExecuteNonQuery(); 

//close etc 

我希望能夠以類似的方式插入一行。這可能嗎?

+0

您可能需要考慮使用外部庫來操作Excel文件,如http://npoi.codeplex.com/而不是OleDB。 – ipavlic

回答

1

一目瞭然,你需要指定讀寫,默認是隻讀的。也許: 「Provider = Microsoft.Jet.OLEDB.4.0;」 & _ 「Data Source = C:\ Docs \ Test.xls;」 & _ 「模式=讀寫;擴展屬性=」 「的Excel 8.0; HDR =否」 「」

在第二一眼,再評論,我想Interop可能是最好的選擇。

+0

乾杯,其實,我可以寫得很好,問題是我需要插入一行而不是將數據添加到現有的數據。 – Damien

+0

對不起,我不明白你的意思。我雖然我指的是插入一個新行(http://stackoverflow.com/questions/5027899/excel-db-operation-must-use-an-updateable-query/5027963#5027963) – Fionnuala

+0

對不起,我沒有闡明這很好。我提供的代碼工作正常,我的連接字符串允許我插入數據時讀/寫。我需要添加一行,將所有現有的行/內容向下移動。 – Damien

0

ipavlic是正確的,你會更好使用這個外部的第三方庫。有幾個可用。 OfficeWriter是一個例子:

http://www.officewriter.com

一旦你打開與OfficeWriter一個工作簿時,您可以使用該工作表類此方法來插入行。它模仿Excel的行爲,包括更新/拉伸公式和其他更新:

public void InsertRows(int rowNumber, int rowCount) 
相關問題