7

我有一个 10 列和 1-20 行的 excel 文件。我需要插入 1-20 行各种数据元素。

我想知道是否有一种方法可以将一些标签放入 excel 文件中,以便可以找到并替换它们。将列标记为“名称”的东西。这样在代码中我只能说:

Name[0] = object.name;

我不确定这种确切的方法是否可行,但我真的不需要任何繁重的工作,而且我宁愿不对单元格位置进行硬编码,因为 excel 文件可能会随着时间而改变。

我还必须在行中添加一个隐藏的“ID”单元格。我想我以后可以过那座桥。

4

2 回答 2

14

使用 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);

唉,我找不到引用各个列的方法。

于 2012-08-27T19:54:48.100 回答
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;

    }    
于 2012-08-27T19:34:58.490 回答