Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.Net将简单数据插入Excel文件的最简单方法_C#_.net_Excel - Fatal编程技术网

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

C# 从.Net将简单数据插入Excel文件的最简单方法,c#,.net,excel,C#,.net,Excel,我有一个excel文件,有10列和1-20行。我需要插入包含各种数据元素的1-20行 我想知道是否有一种方法可以在excel文件中放置一些标记,以便找到并替换它们。将一列标记为“名称”的东西。这样,在代码中,我可以说: Name[0]=object.Name 我不确定这种精确的方法是否可行,但我真的不需要任何繁重的工作,我也不需要硬编码单元格位置,因为excel文件可能会随着时间的推移而改变 我还必须在第行中添加一个隐藏的“ID”单元格。不过,我想我以后可以跨越这座桥。使用ADO.NET很容易将

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

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

Name[0]=object.Name

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


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

使用ADO.NET很容易将一行添加到Excel工作表中

    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;

    }    
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。。。作为列名。 此外,代码使用Excel2007或2010的ACE OleDB提供程序,而不是Microsoft.Jet.OleDB.4.0

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

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

唉,我找不到一种方法来参考各个专栏。

你试过什么?MSDN有例子吗?您有ADO.NET和自动化。使用ADO.NET,可以将命名范围视为表。ADO.NET使用Jet提供程序。ADO.NET需要一些结构,但它更简单(在我看来),不需要Excel。感谢您的回复。您知道是否有一种更智能地添加值的简单方法吗?可能是使用excel文件中已经存在的命名范围。我的问题是,该部分上方有几行需要编辑。很抱歉,我的第一篇文章没有传达这一点。这太完美了!非常感谢你。我在谷歌上搜索这个问题时做了一个噩梦。有没有更快的方法插入行?成百上千的人正在使我的网站运行缓慢。对于那些想知道为什么这段代码对他们不起作用的人,就像我一样,你需要将FIRTSCOLUMN和FIRSTROW更改为0,0以外的内容。Excel工作表中左上角的单元格为1,1。