通过C#和OleDb向Excel电子表格插入行

3

我需要以编程的方式多次向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

我希望能以类似的方式插入一行。这可行吗?

你可能想考虑使用外部库来操作Excel文件,例如http://npoi.codeplex.com/,而不是OleDB。 - ipavlic
2个回答

2
一眼看去,您需要指定读写权限,默认为只读。也许应该这样写:
"Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Docs\Test.xls;" & _ "Mode=ReadWrite;Extended Properties=""Excel 8.0;HDR=No"""
再看一眼和评论后,我认为Interop可能是最好的选择。

干杯,实际上,我可以写得很好,问题是我需要插入一行而不是添加到现有数据。 - Damien
抱歉,我不明白你的意思。我认为我是在提到插入新行(http://stackoverflow.com/questions/5027899/excel-db-operation-must-use-an-updateable-query/5027963#5027963)。 - Fionnuala
抱歉,我的表述可能不太清楚。我提供的代码运行良好,我的连接字符串允许我在插入数据时进行读写操作。我需要添加一行,将所有现有行/内容向下移动。 - Damien
@Damien 啊,抱歉!我认为ODBC对你来说行不通,我认为你需要使用interop(https://dev59.com/jnNA5IYBdhLWcg3wC5Th) - Fionnuala
如果你想将其作为答案添加(使用Interop),我可以接受它。这可能比我接受这个更有意义。 - Damien

0

ipavlic是正确的,你最好使用外部第三方库来完成这个任务。有几个可用的选择。OfficeWriter就是其中之一:

http://www.officewriter.com

使用OfficeWriter打开工作簿后,您可以在Worksheet类上使用此方法插入行。它模仿Excel的行为,包括更新/拉伸公式和其他更新:

public void InsertRows(int rowNumber, int rowCount)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接