【解決方法】fastexcel と C# を使用して Excel ファイルからデータを追加して sqlite データベースを更新するにはどうすればよいですか?

プログラミングQA


を使用してExcelファイルからデータを取得することにより、SQLiteデータベースのテーブルにデータを追加しようとしています fastexcel ライブラリ.

しかし、ワークシートの行の特定のセル/列から値を取得する方法がわかりません。

誰でもこれで私を助けてくれますか…

私が試したこと:

C#
public void UpdateDBtable()
{
			DataTable dt = new DataTable();

			dt.Columns.Add("Party");
			dt.Columns.Add("Bill No");
			...
			dt.Columns.Add("Head");

			
			string file_Bills = @"D:\Test\Test.xlsx";
			
			using (FastExcel.FastExcel fastExcel = new FastExcel.FastExcel(file_Bills, true))
			{

				Worksheet worksheet = fastExcel.Read(1);
				
				var rows = worksheet.Rows.ToArray();
				
				//ideally the below rows.Count() should be the count of number of rows whose column A value exists but don't know how to do that either
				for (int _row = 2; _row <= rows.Count(); _row++)
				{
					DataRow dr = dt.NewRow();

					//below line is intended to get specific cells text but doesn't work
					dt.Rows.Add(worksheet.Cells[_row, 1].Text, worksheet.Cells[_row, 2].Text, ..., worksheet.Cells[_row, 7].Text);
					
					dt.AcceptChanges();
					
				}
				using(SQLiteConnection conn= new SQLiteConnection(@"Data Source="+Path.GetFullPath("./test.db")))
				{
					conn.Open();
					
					using (var cmd = new SQLiteCommand(conn))
					{
						
						string str;
						SQLiteCommand com;

						foreach (DataRow row in dt.Rows) 
						{
							str = "INSERT OR IGNORE INTO billdata(Party,BillNo,...,Head)values(@Party,@BillNo,...,@Head)";
							
							com = new SQLiteCommand(str, conn);
							com.Parameters.AddWithValue("@Party", row.Field<string>(0));
							com.Parameters.AddWithValue("@BillNo", row.Field<string>(1));
							...
							com.Parameters.AddWithValue("@Head", row.Field<string>(8));
							com.ExecuteNonQuery();
						}
						
					}
					
					conn.Close();
				}
				
			}
			
}

解決策 1

そのプロジェクトで彼らが提供した例から、例2を読むにはこのスニペットがあります

C#
var rows = worksheet.Rows.ToArray();
        //Do something with rows
        Console.WriteLine(string.Format("Worksheet Rows:{0}", rows.Count()));

その場合、配列は rows は 2 次元配列です。これは、例を実行して調べることで確認できます。 rows ウォッチ ウィンドウで。 何かのようなもの rows[0,1] おそらくセルA2の値を返します。
ただし、これはそのプロジェクトの作成者に最もよく尋ねられる質問です。

コメント

タイトルとURLをコピーしました