从.Net向Excel文件插入简单数据的最简单方法

7
我有一个Excel文件,大约有10列和1-20行。我需要插入1-20行各种数据元素。
我想知道是否有一种方法可以在Excel文件中放置一些标记以便找到并替换它们。例如将某一列标记为“名称”。这样在代码中就可以这么写: Name[0] = object.name; 我不确定是否可以使用这种确切的方法,但我真的不需要太复杂的操作,也不想硬编码单元格位置,因为Excel文件可能会随着时间而改变。
我还需要在一行中添加一个隐藏的“ID”单元格。我想我以后可以解决这个问题。

你尝试过什么?MSDN有例子吗?你有ADO.NET和自动化。使用ADO.NET,命名范围可以像表格一样处理。ADO.NET使用Jet提供程序。ADO.NET需要一些结构,但在我看来更容易,并且不需要Excel。 - paparazzo
2个回答

13

使用 ADO.NET 很容易向 Excel 表格中添加一行

string fileName = @"D:\test.xlsx"; 
string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;" + 
        "Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=0'", fileName); 

using(OleDbConnection cn = new OleDbConnection(connectionString))
{
    cn.Open();
    OleDbCommand cmd1 = new OleDbCommand("INSERT INTO [Sheet1$] " + 
         "([Column1],[Column2],[Column3],[Column4]) " + 
         "VALUES(@value1, @value2, @value3, @value4)", cn);
   cmd1.Parameters.AddWithValue("@value1", "Key1");
   cmd1.Parameters.AddWithValue("@value2", "Sample1");
   cmd1.Parameters.AddWithValue("@value3", 1);
   cmd1.Parameters.AddWithValue("@value4", 9);
   cmd1.ExecuteNonQuery();
}

上面的代码假设您有第一行作为标题,并使用Column1...作为列名。 此外,该代码使用Excel 2007或2010的ACE OleDB提供程序,而不是Microsoft.Jet.OleDb.4.0。

编辑:要引用命名范围,您可以将sql命令更改为以下命令

    OleDbCommand cmd1 = new OleDbCommand("INSERT INTO [yourNamedRange] " + 
                        "VALUES(@value1, @value2, @value3, @value4)", cn);

哎呀,我找不到指向单个列的方法。


谢谢您的回复。您是否知道是否有一种更智能地添加值的简单方法?也许可以使用已经存在于Excel文件中的命名区域。 - PFranchise
我的问题是需要编辑的部分上面有几行。很抱歉在我最初的帖子中没有表达清楚。 - PFranchise
太好了!非常感谢你。我在谷歌上搜寻这个问题时,真的是噩梦一样的体验。 - PFranchise
有没有更快的方法来插入行?数百或数千行正在导致我的网站运行缓慢。 - triswill227

7
    private Excel.Application app = null;
    private Excel.Workbook workbook = null;
    private Excel.Worksheet worksheet = null;
    private Excel.Range workSheet_range = null;
    private const int FIRTSCOLUMN= 0 //Here const you will use to select good column
    private const int FIRSTROW= 0
    private const int FIRSTSHEET= 1

    app = new Excel.Application();
    app.Visible = true;
    workbook = app.Workbooks.Add(1);
    worksheet = (Excel.Worksheet)workbook.Sheets[FIRSTSHEET];
    addData(FIRSTROW,FIRTSCOLUMN,"yourdata");


 public void addData(int row, int col, string data)
    {
        worksheet.Cells[row, col] = data;

    }    

1
对于那些想知道为什么这段代码对他们无效的人,就像我一样,你需要将FIRTSCOLUMN和FIRSTROW更改为除了0,0之外的其他值。Excel工作表中左上角的单元格是1,1。 - Rich N

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