私は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);
出力から正しいカウントが得られますが、さらに2つの質問があります。
1. select whereステートメントを作成する方法(行にアクセスする方法)?
select * from [Tabelle1$] where A = '123' (A being an existing Excel row)
間違ったパラメータに言及しているエラーをスローします...
2.チュートリアルリンクまたはデータへのアクセス方法の短いサンプルを誰かに提供できますか?
次のサンプルコードを参照してください。
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;
}
個人的には、OleDbConnectionsでExcelスプレッドシートを読むのは扱いにくいことに気づきました。したがって、私は素晴らしいオープンソース&無料 ExcelMapperの代替案を提供したいと思います。
OLEクエリと比較して、Excelファイルを読み取るためのより簡潔な(つまり、読み取り可能な)方法を提供します。
1。 Excelファイルがある場合:
2.Person C#オブジェクトを作成します:
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.誰でも私にチュートリアルリンクまたはデータへのアクセス方法の短いサンプルを提供できます"
上記は短い video です。
私はこれが古い質問であることを知っていますが、このページは "import xlsx c#"に関するGoogleの結果で高く評価されたため、NPOIライブラリを使用してxls/xlsxデータを読み取る、よりモダンでシンプルな方法を追加したいと考えました。新しいc#開発者に、ado.netを使用するよりもExcelデータをインポートする方が簡単な方法があることを知ってもらいたいと思います。
NPOIとNpoi.Mapper(donnytianから: https://github.com/donnytian/Npoi.Mapper )の組み合わせを使用して、Excelファイルを簡単にインポートします。 NPOIおよびNpoi.Mapperへのnuget参照を追加すると、インポートする列に直接相関する強く型付けされたクラスを使用して、xls/xlsxデータをインポートできます。
`` `System.IOを使用; System.Linqを使用します。 Npoi.Mapperを使用します。 Npoi.Mapper.Attributesを使用します。 NPOI.SS.UserModelを使用します。 UserManagementService.Modelsを使用します。
名前空間JobCustomerImport.Processors {パブリッククラスExcelEmailProcessor {プライベートUserManagementServiceContext DataContext {取得; }
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ファイルを簡単にインポートする方法 。
ありがとう!ダン