在c#中从XLSX读取数据

本文关键字:读取 数据 XLSX 中从 | 更新日期: 2023-09-27 17:54:57

我是c#的新手,我试图用以下代码在c#中读取XLSX文件:

string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=c:''Temp''source.xlsx;Extended Properties='"Excel 12.0;HDR=Yes;IMEX=1'";";
//code to read the content of format file 
OleDbConnection con = new OleDbConnection(Connection);
OleDbCommand command = new OleDbCommand();
DataTable dt = new DataTable();
OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Tabelle1$]", con);
myCommand.Fill(dt);
Console.Write(dt.Rows.Count);

我从输出中得到一个正确的计数,但我还有两个问题:

1。如何使一个select where语句(如何访问行)?

 select * from [Tabelle1$] where A = '123' (A being an existing Excel row)

将抛出错误,提及错误的参数…

2。谁能给我提供一个教程链接或简短的样本如何访问数据?

在c#中从XLSX读取数据

请参考以下示例代码:

private DataTable LoadXLS(string strFile, String sheetName, String column, String value)
{
    DataTable dtXLS = new DataTable(sheetName);
    try
    {
       string strConnectionString = "";
       if(strFile.Trim().EndsWith(".xlsx")) {
           strConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='"Excel 12.0 Xml;HDR=YES;IMEX=1'";", strFile);
       } else if(strFile.Trim().EndsWith(".xls")) {
           strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='"Excel 8.0;HDR=Yes;IMEX=1'";", strFile);
       }
       OleDbConnection SQLConn = new OleDbConnection(strConnectionString);
       SQLConn.Open();
       OleDbDataAdapter SQLAdapter = new OleDbDataAdapter();
       string sql = "SELECT * FROM [" + sheetName + "$] WHERE " + column + " = " + value;
       OleDbCommand selectCMD = new OleDbCommand(sql, SQLConn);
       SQLAdapter.SelectCommand = selectCMD;
       SQLAdapter.Fill(dtXLS);
       SQLConn.Close();
    }
    catch (Exception e)
    {
       Console.WriteLine(e.ToString());
    }
    return dtXLS;
}

我知道这是一个很好的答案的老问题,但是这个页面在谷歌的"导入xlsx c#"的结果中排名很高,所以我想添加一个更现代和更简单的方法来使用NPOI库读取xls/xlsx数据。我想确保新的c#开发人员知道,有一种更简单的方法来导入Excel数据,而不是使用ado.net。

我使用NPOI和NPOI的组合。Mapper(来自donnytian: https://github.com/donnytian/Npoi.Mapper)可以轻松导入Excel文件。添加NPOI和NPOI的核引用。Mapper,然后您可以使用强类型类导入xls/xlsx数据,这些强类型类直接与您想要导入的列相关。

' ' '使用先;使用来;使用Npoi.Mapper;使用Npoi.Mapper.Attributes;使用NPOI.SS.UserModel;使用UserManagementService.Models;

JobCustomerImport

名称空间。处理器{公共类ExcelEmailProcessor{private UserManagementServiceContext DataContext {get;}

    public ExcelEmailProcessor(int customerNumber)
    {
        DataContext = new UserManagementServiceContext();
    }
    public void Execute(string localPath, int sheetIndex)
    {
        IWorkbook workbook;
        using (FileStream file = new FileStream(localPath, FileMode.Open, FileAccess.Read))
        {
            workbook = WorkbookFactory.Create(file);
        }
        var importer = new Mapper(workbook);
        var items = importer.Take<MurphyExcelFormat>(sheetIndex);
        foreach(var item in items)
        {
            var row = item.Value;
            if (string.IsNullOrEmpty(row.EmailAddress))
                continue;
            UpdateUser(row);
        }
        DataContext.SaveChanges();
    }
    private void UpdateUser(MurphyExcelFormat row)
    {
        //LOGIC HERE TO UPDATE A USER IN DATABASE...
    }
    private class MurphyExcelFormat
    {
        [Column("District")]
        public int District { get; set; }
        [Column("DM")]
        public string FullName { get; set; }
        [Column("Email Address")]
        public string EmailAddress { get; set; }
        [Column(3)]
        public string Username { get; set; }
        public string FirstName
        {
            get
            {
                return Username.Split('.')[0];
            }
        }
        public string LastName
        {
            get
            {
                return Username.Split('.')[1];
            }
        }
    }
}

}' ' '

如果你感兴趣的话,我已经在我的博客上介绍了一些细节:如何轻松导入excel文件。

谢谢!丹