Чтение данных из XLSX в С#
Я новичок в С# и пытаюсь прочитать файл 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.может ли кто-нибудь предоставить мне ссылку на учебник или краткую справку о том, как получить доступ к данным?
Ответы
Ответ 1
Пожалуйста, обратитесь к следующему образцу кода:
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;
}
Ответ 2
Лично мне трудно читать электронные таблицы Excel с OleDbConnections; поэтому я хотел бы предложить отличный с открытым исходным кодом & бесплатная альтернатива ExcelMapper.
Он обеспечивает гораздо более краткий (т.е. читабельный) способ чтения файлов Excel по сравнению с OLE-запросами.
1. Имеется файл Excel:
![enter image description here]()
2. Создайте объект Person С#:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
3. Прочтите его, используя ExcelMapper
var fileName = @"C:\Temp\Names.xlsx"; // your excel file
List<Person> people = new ExcelMapper(fileName).Fetch<Person>();
Вы также можете читать из других таблиц, просто передав дополнительный аргумент листа:
var fileName = @"C:\Temp\Names.xlsx"; // your excel file
List<Person> people = new ExcelMapper(fileName).Fetch<Person>("Sheet2");
Вы можете установить его с помощью NuGet
Install-Package ExcelMapper
Отказ от ответственности: я не связан с ExcelMapper, но, попробовав различные библиотеки, я нашел, что с этой библиотекой проще всего работать.
Reg: "2. Кто-нибудь может дать мне ссылку на учебник или краткий пример, как получить доступ к данным"
Вот короткое видео, демонстрирующее вышеизложенное.
![instructional video - how to read excel files in c#]()
Ответ 3
Я знаю, что это старый вопрос с хорошим ответом, но эта страница показала высокие результаты Google по запросу "import xlsx c #", поэтому я хотел добавить более современный и более простой способ чтения данных xls/xlsx с использованием библиотеки NPOI. Я хочу убедиться, что новые разработчики на С# знают, что существует более простой способ импорта данных Excel, чем использование ado.net.
Я использую комбинацию NPOI и Npoi.Mapper (от donnytian: https://github.com/donnytian/Npoi.Mapper), чтобы легко импортировать файлы Excel. Добавьте ссылку на nuget в NPOI и Npoi.Mapper, а затем вы можете импортировать данные xls/xlsx, используя строго типизированные классы, которые напрямую связаны со столбцами, которые вы хотите импортировать.
'' 'используя System.IO;
использование System.Linq;
используя Npoi.Mapper;
использование Npoi.Mapper.Attributes;
используя NPOI.SS.UserModel;
использование UserManagementService.Models;
пространство имен JobCustomerImport.Processors
{ открытый класс 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.
Спасибо!
Дэн