FIC_Solar/solarApp/Service/excelHelper.cs
2021-11-10 21:31:41 +08:00

367 lines
15 KiB
C#

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_October(`No.`, `雲端收到時間`, `資料取得時間`, `交流電壓`, `交流電流`, `交流功率`, `溫度`, `累積發電量`, `頻率`, `狀態`, saveDate, filename, inverterID)
//ss.Append(@"INSERT INTO solar_import.auo_aimai(`No.`, `雲端收到時間`, `資料取得時間`, `交流電壓`, `交流電流`, `交流功率`, `溫度`, `累積發電量`, `頻率`, `狀態`, saveDate, filename, inverterID)
ss.Append(@"INSERT INTO solar_import.auo_aimai_october(`No.`, `雲端收到時間`, `資料取得時間`, `交流電壓`, `交流電流`, `交流功率`, `溫度`, `累積發電量`, `頻率`, `狀態`, saveDate, filename, inverterID)
values( '"
+ row.Field<string>("1").ToString() + "' ,'"
+ row.Field<string>("2").ToString() + "' ,'"
+ row.Field<string>("3").ToString() + "' ,'"
+ row.Field<string>("4").ToString() + "' ,'"
+ row.Field<string>("5").ToString() + "' ,'"
+ row.Field<string>("6").ToString() + "' ,'"
+ row.Field<string>("7").ToString() + "' ,'"
+ row.Field<string>("8").ToString() + "' ,'"
+ row.Field<string>("9").ToString() + "' ,'"
+ row.Field<string>("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, string tablename)
{
bool result = false;
StringBuilder ss = new StringBuilder();
using (MySqlConnection conn = new MySqlConnection(Connection1))
{
conn.Open();
int i = 0;
foreach (DataRow row in dt.Rows)
{ //c10, c11, c12, c13, c14, c15, c16,
//iPVita_temp ss.Append(@"INSERT INTO solar_import.auo_taiping(`No.`, `雲端收到時間`, `資料取得時間`, `交流電壓`, `交流電流`, `交流功率`, `溫度`, `累積發電量`, `頻率`, `狀態`, saveDate, filename, inverterID)
ss.Append(@"INSERT INTO solar_import."+ tablename + @"(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13 , c14, c15, c16, insertDate)
values( '"
+ row.Field<string>("1").ToString() + "' ,'"
+ row.Field<string>("2").ToString() + "' ,'"
+ row.Field<string>("3").ToString() + "' ,'"
+ row.Field<string>("4").ToString() + "' ,'"
+ row.Field<string>("5").ToString() + "' ,'"
+ row.Field<string>("6").ToString() + "' ,'"
+ row.Field<string>("7").ToString() + "' ,'"
+ row.Field<string>("8").ToString() + "' ,'"
+ row.Field<string>("9").ToString() + "' ,'"
+ row.Field<string>("10").ToString() + "' ,'"
+ row.Field<string>("11").ToString() + "' ,'"
+ row.Field<string>("12").ToString() + "' ,'"
+ row.Field<string>("13").ToString() + "' ,'"
+ row.Field<string>("14").ToString() + "' ,'"
+ row.Field<string>("15").ToString() + "', '"
+ row.Field<string>("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<string>("1").ToString() + "' ,'"
+ row.Field<string>("2").ToString() + "' ,'"
+ row.Field<string>("3").ToString() + "' ,'"
+ row.Field<string>("4").ToString() + "' ,'"
+ row.Field<string>("5").ToString() + "' ,'"
+ row.Field<string>("6").ToString() + "' ,'"
+ row.Field<string>("7").ToString() + "' ,'"
+ row.Field<string>("8").ToString() + "' ,'"
+ row.Field<string>("9").ToString() + "' ,'"
+ row.Field<string>("10").ToString() + "' ,'"
+ row.Field<string>("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();
// }
//}
}
}