using System; using System.Collections.Generic; using System.Text; // ref https://www.c-sharpcorner.com/article/read-excel-file-in-c-sharp-winform/ //using Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; using System.Data; using Microsoft.Office.Interop; using MySql.Data.MySqlClient; using System.Configuration; using Dapper; namespace solarApp.Service { public class excelHelper { string Connection1 = ConfigurationManager.ConnectionStrings["mySql"].ConnectionString; void readExcel(string fname, ref System.Data.DataTable dt) { Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(fname); Microsoft.Office.Interop.Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange; int rowCount = xlRange.Rows.Count; int colCount = xlRange.Columns.Count; DataRow mydr; // dt.Column = colCount; //dataGridView1.ColumnCount = colCount; //dataGridView1.RowCount = rowCount; for (int i = 1; i <= rowCount; i++) { mydr = dt.NewRow(); for (int j = 1; j <= colCount; j++) { //write the value to the Grid if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null) { //dataGridView1.Rows[i - 1].Cells[j - 1].Value = xlRange.Cells[i, j].Value2.ToString(); } // Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t"); //add useful things here! } } //cleanup GC.Collect(); GC.WaitForPendingFinalizers(); //rule of thumb for releasing com objects: // never use two dots, all COM objects must be referenced and released individually // ex: [somthing].[something].[something] is bad //release com objects to fully kill excel process from running in the background Marshal.ReleaseComObject(xlRange); Marshal.ReleaseComObject(xlWorksheet); //close and release xlWorkbook.Close(); Marshal.ReleaseComObject(xlWorkbook); //quit and release xlApp.Quit(); Marshal.ReleaseComObject(xlApp); } public bool insertDay2DB(DataTable dt, string filename, string inverterID) { bool result = false; StringBuilder ss = new StringBuilder(); using (MySqlConnection conn = new MySqlConnection(Connection1)) { conn.Open(); int i = 0; foreach (DataRow row in dt.Rows) { //ss.Append(@"INSERT INTO solar_import.auo_taiping(`No.`, `雲端收到時間`, `資料取得時間`, `交流電壓`, `交流電流`, `交流功率`, `溫度`, `累積發電量`, `頻率`, `狀態`, saveDate, filename, inverterID) ss.Append(@"INSERT INTO solar_import.auo_aimai(`No.`, `雲端收到時間`, `資料取得時間`, `交流電壓`, `交流電流`, `交流功率`, `溫度`, `累積發電量`, `頻率`, `狀態`, saveDate, filename, inverterID) values( '" + row.Field("1").ToString() + "' ,'" + row.Field("2").ToString() + "' ,'" + row.Field("3").ToString() + "' ,'" + row.Field("4").ToString() + "' ,'" + row.Field("5").ToString() + "' ,'" + row.Field("6").ToString() + "' ,'" + row.Field("7").ToString() + "' ,'" + row.Field("8").ToString() + "' ,'" + row.Field("9").ToString() + "' ,'" + row.Field("10").ToString() + "', now(), '"+ filename + "', '" + inverterID + "');"); if (i % 10 == 0) { conn.Execute(ss.ToString()); ss.Clear(); } i++; } if (ss.Length > 0) { conn.Execute(ss.ToString()); ss.Clear(); } conn.Clone(); } return result; } public bool insertFile2DB(string[] filename, string station_name) { bool result = false; StringBuilder ss = new StringBuilder(); using (MySqlConnection conn = new MySqlConnection(Connection1)) { conn.Open(); int i = 0; foreach (var fullfileName in filename) { string[] ff = fullfileName.Split("\\"); string fname = string.Empty; fname += ff[ff.Length - 1]; //只抓最後的檔名 string inverterID = string.Empty; string[] str = fname.Split("_"); inverterID = str[str.Length - 3] + "_" + str[str.Length - 2]; str = inverterID.Split(" "); inverterID = str[str.Length -1]; fname = fullfileName.Replace("\\", "/"); //if (fullfileName == "D:AUO台中太平inverter110") { // str[0] = "123"; //} ss.Append(@"insert into `solar_import`.`auo_file_list`( `station_name`, `filename`, inverterid, `inser_date`) values( '" + station_name + "' ,'" + fname + "' ,'" + inverterID + "' , now() );"); if (i % 10 == 0) { conn.Execute(ss.ToString()); ss.Clear(); } i++; } if (ss.Length > 0) { conn.Execute(ss.ToString()); ss.Clear(); } conn.Clone(); } return result; } public bool insert_dailyReport2DB(string[] filename, string station_name) { bool result = false; StringBuilder ss = new StringBuilder(); using (MySqlConnection conn = new MySqlConnection(Connection1)) { conn.Open(); int i = 0; foreach (var fullfileName in filename) { string[] ff = fullfileName.Split("\\"); string fname = string.Empty; fname += ff[ff.Length - 1]; //只抓最後的檔名 //string inverterID = string.Empty; //string[] str = fname.Split("_"); //inverterID = str[str.Length - 3] + "_" + str[str.Length - 2]; //str = inverterID.Split(" "); //inverterID = str[str.Length - 1]; fname = fullfileName.Replace("\\", "/"); //if (fullfileName == "D:AUO台中太平inverter110") { // str[0] = "123"; //} // ss.Append(@"insert into `solar_import`.`auo_file_list`( `station_name`, `filename`, inverterid, `inser_date`) //values( '" // + station_name + "' ,'" // + fname + "' ,'" // + inverterID + "' , now() );"); ss.Append(@"insert into `solar_import`.`iPVita_file_list`( `station_name`, `filename`, inverterid, `inser_date`) values( '" + station_name + "' ,'" + fname + "' ,'' , now() );"); if (i % 10 == 0) { conn.Execute(ss.ToString()); ss.Clear(); } i++; } if (ss.Length > 0) { conn.Execute(ss.ToString()); ss.Clear(); } conn.Clone(); } return result; } public bool insert_dailyReport2DB(DataTable dt, string filename) { bool result = false; StringBuilder ss = new StringBuilder(); using (MySqlConnection conn = new MySqlConnection(Connection1)) { conn.Open(); int i = 0; foreach (DataRow row in dt.Rows) { //ss.Append(@"INSERT INTO solar_import.auo_taiping(`No.`, `雲端收到時間`, `資料取得時間`, `交流電壓`, `交流電流`, `交流功率`, `溫度`, `累積發電量`, `頻率`, `狀態`, saveDate, filename, inverterID) ss.Append(@"INSERT INTO solar_import.iPVita_temp (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, insertDate) values( '" + row.Field("1").ToString() + "' ,'" + row.Field("2").ToString() + "' ,'" + row.Field("3").ToString() + "' ,'" + row.Field("4").ToString() + "' ,'" + row.Field("5").ToString() + "' ,'" + row.Field("6").ToString() + "' ,'" + row.Field("7").ToString() + "' ,'" + row.Field("8").ToString() + "' ,'" + row.Field("9").ToString() + "' ,'" + row.Field("10").ToString() + "' ,'" + row.Field("11").ToString() + "' ,'" + row.Field("12").ToString() + "' ,'" + row.Field("13").ToString() + "' ,'" + row.Field("14").ToString() + "' ,'" + row.Field("15").ToString() + "', '" + row.Field("Column1").ToString() + "', now());"); if (i % 10 == 0) { conn.Execute(ss.ToString()); ss.Clear(); } i++; } if (ss.Length > 0) { conn.Execute(ss.ToString()); ss.Clear(); } conn.Clone(); } return result; } public bool insertDay2DB_enlux_gong34(DataTable dt, string filename) { bool result = false; StringBuilder ss = new StringBuilder(); using (MySqlConnection conn = new MySqlConnection(Connection1)) { conn.Open(); int i = 0; foreach (DataRow row in dt.Rows) { //ss.Append(@"INSERT INTO solar_import.auo_taiping(`No.`, `雲端收到時間`, `資料取得時間`, `交流電壓`, `交流電流`, `交流功率`, `溫度`, `累積發電量`, `頻率`, `狀態`, saveDate, filename, inverterID) ss.Append(@"INSERT INTO solar_import.enlux_gong34(UploadTime, S1_AC, S1_DC, S2_AC, S2_DC, S3_AC, S3_DC, S4_AC, S4_DC, sunshine, temperature, saveDate, filename) values( '" + row.Field("1").ToString() + "' ,'" + row.Field("2").ToString() + "' ,'" + row.Field("3").ToString() + "' ,'" + row.Field("4").ToString() + "' ,'" + row.Field("5").ToString() + "' ,'" + row.Field("6").ToString() + "' ,'" + row.Field("7").ToString() + "' ,'" + row.Field("8").ToString() + "' ,'" + row.Field("9").ToString() + "' ,'" + row.Field("10").ToString() + "' ,'" + row.Field("11").ToString() + "' , now(), '" + filename + "');"); if (i % 10 == 0) { conn.Execute(ss.ToString()); ss.Clear(); } i++; } if (ss.Length > 0) { conn.Execute(ss.ToString()); ss.Clear(); } conn.Clone(); } return result; } public bool insertFile2DB__enlux_gong34(string[] filename, string station_name) { bool result = false; StringBuilder ss = new StringBuilder(); using (MySqlConnection conn = new MySqlConnection(Connection1)) { conn.Open(); int i = 0; foreach (var fullfileName in filename) { string[] ff = fullfileName.Split("\\"); string fname = string.Empty; fname += ff[ff.Length - 1]; //只抓最後的檔名 //string inverterID = string.Empty; //string[] str = fname.Split("_"); //inverterID = str[str.Length - 3] + "_" + str[str.Length - 2]; //str = inverterID.Split(" "); //inverterID = str[str.Length - 1]; fname = fullfileName.Replace("\\", "/"); //if (fullfileName == "D:AUO台中太平inverter110") { // str[0] = "123"; //} ss.Append(@"insert into `solar_import`.`enlux_file_list`( `station_name`, `filename`, `inser_date`) values( '" + station_name + "' ,'" + fname + "' , now() );"); if (i % 10 == 0) { conn.Execute(ss.ToString()); ss.Clear(); } i++; } if (ss.Length > 0) { conn.Execute(ss.ToString()); ss.Clear(); } conn.Clone(); } return result; } //public void ReadSample() //{ // Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); // if (excelApp != null) // { // Microsoft.Office.Interop.Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(@"C:\test.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); // Microsoft.Office.Interop.Excel.Worksheet excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)excelWorkbook.Sheets[1]; // Excel.Range excelRange = excelWorksheet.UsedRange; // int rowCount = excelRange.Rows.Count; // int colCount = excelRange.Columns.Count; // for (int i = 1; i <= rowCount; i++) // { // for (int j = 1; j <= colCount; j++) // { // Excel.Range range = (excelWorksheet.Cells[i, 1] as Excel.Range); // string cellValue = range.Value.ToString(); // //do anything // } // } // excelWorkbook.Close(); // excelApp.Quit(); // } //} } }