using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Uninpho.DBOperation.Model; using Uninpho.DBOperation.Operation; using System.IO; using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid; using Uninpho.Tools.components.MTLFF; using ClosedXML.Excel; using System.Text.RegularExpressions; using System.Reflection; namespace Uninpho.Tools.components.XXXW { class XXXWCommon { public static string UUID = String.Empty; /// /// 初始化原始空格分隔的CSV /// public static string NewPageSave2PG(int rowcount) { List xxcsvdata = new List(); //存list表数据 UUID = DataAnalysisToPG.Insertdata_CsvList(new T_xxxw_csvlist() { Xianluming = ExcelTools.xianluming, Zhanming = ExcelTools.chezhan, Daochahao = ExcelTools.daocha, Jianchariqi = ExcelTools.jianceshijian, Zch = ExcelTools.zhecha, Sjth = ExcelTools.shejituhao, Jiancharen = DateTime.Now.ToString()//临时的,保不齐哪天又想在录入的时候添加更新人之类的 //Gengxinriqi = DateTime.Now.ToString(), //Gengxinren = UserInform.userinf.Username }); readExcel(ExcelTools.filenameall, 44, rowcount, ref xxcsvdata); //存data表数据 DataAnalysisToPG.Insertdata_CsvData(xxcsvdata); return UUID; } static string uuid_ = string.Empty;//预防报错 public static string saveData2PG(string url) { string uuid = uuid_; List xxcsvdata = new List(); string[] filename = Path.GetFileNameWithoutExtension(url).Split('_'); try { readSCV(url, ref xxcsvdata); uuid = DataAnalysisToPG.Insertdata_CsvList(new T_xxxw_csvlist() { Xianluming = filename[0], Zhanming = filename[1], Daochahao = filename[2], Jianchariqi = getYMD(filename[3]), Jiancharen = DateTime.Now.ToString()//临时的,保不齐哪天又想在录入的时候添加更新人之类的 //Gengxinriqi = DateTime.Now.ToString(), //Gengxinren = UserInform.userinf.Username }); foreach (var item in xxcsvdata) { item.Listid = uuid; } DataAnalysisToPG.Insertdata_CsvData(xxcsvdata); XtraMessageBox.Show("导入成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception) { XtraMessageBox.Show("无法从文件名提取有效信息,请规范文件命名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } return uuid; } /// /// 解析时间 /// private static string getYMD(string ymd) { //如果这里以后修改,轮轨力输入检测日期那块也要改!!! Char[] ymdcha = ymd.ToCharArray();//年月日 string year = ymdcha[0].ToString() + ymdcha[1].ToString() + ymdcha[2].ToString() + ymdcha[3].ToString(); string mouth = ymdcha[4].ToString() + ymdcha[5].ToString(); string day = ymdcha[6].ToString() + ymdcha[7].ToString(); return year + "/" + mouth + "/" + day; } /// /// 读scv /// /// private static void readSCV(string url, ref List xxcsvdata) { StreamReader sr = new StreamReader(url, GetEncoding(url)); sr.ReadLine(); sr.ReadLine(); while (!sr.EndOfStream) { string origonss = sr.ReadLine(); origonss = origonss.Replace(" ", " "); origonss = origonss.Replace("/t", ","); origonss = origonss.Replace(" ", ","); var arrayarr = origonss.ToCharArray(); if (arrayarr[0] == ',' && arrayarr[1] == ',') { //简单判断这行是否是多余,例如“,,,,,,,,,,,,,,,,”这种行的录入 continue; } T_xxxw_csvdata onescvdata = new T_xxxw_csvdata(); List loopstring = new List(); //使用正则去除属性字段中的逗号的影响 Regex re = new Regex("(?<=,\").*?(?=\",)", RegexOptions.None); MatchCollection mc = re.Matches(origonss); //保存原始 foreach (var item in mc) { //string ddd = item.ToString().Replace("\"\"", "\""); loopstring.Add(item.ToString()); } //替换属性字段中的逗号为"$$$$$$$$$$$$$yxc$$$$$$$$$$$$$$$" origonss = Regex.Replace(origonss, "(?<=,\").*?(?=\",)", "$$$$$$$$$$$$$yxc$$$$$$$$$$$$$$$"); string[] looparr = origonss.Split(','); //还原之前被替换的字段属性值 int ii = 0; for (int i = 0; i < looparr.Length; i++) { if (looparr[i] == "\"$$$$$$$yxc$$$$$$$$\"") { looparr[i] = loopstring[ii++]; } } ii = 0; //存入T_xxxw_csvdata //string[] propnames = new string[] { "Id", "Listid", "Cld", "Gzidh", "Nc", "Lc", "Gc", "Pmwz", "Spcg", "Gj", "Gddhdb", "Gddb", "Gddhcb", "Gdcb", "Gxdhdb", "Gxdb", "Gxdbcb", "Gxcb", "Dxg", "Zggc", "Yggc", "Zgpm", "Ygpm", "Sygc", "Sygddb", "Sygdcb", "Sypmwz", "Sygxdb", "Sygxcb", "Syspcg", "Sygj", "Fjzj", "Fjidh", "Fjsjcg", "Fjsccg", "Fjsjgj", "Fjscgj", "Fjsj5mgd", "Fjsc5mgd", "Fjsj150mgd", "Fjsc150mgd", "Fjsj5mgx", "Fjsc5mgx", "Fjsj150mgx", "Fjsc150mgx" }; Type t = onescvdata.GetType();//获得该类的Type foreach (PropertyInfo pi in t.GetProperties()) { if (pi.Name != "Id" && pi.Name != "Listid") { pi.SetValue(onescvdata, looparr[ii++]); } } xxcsvdata.Add(onescvdata); } sr.Close(); } /// /// メソッド概要 取文件的编码格式 /// /// /// 機能仕様 取文件的编码格式 /// public static Encoding GetEncoding(string filePath) { using (var reader = new StreamReader(filePath, Encoding.Default, true)) { if (reader.Peek() >= 0) { reader.Read(); } Encoding encoding = reader.CurrentEncoding; reader.Close(); return encoding; } } /// /// メソッド概要 文字编码转换处理 /// /// /// 機能仕様 文字编码转换处理 /// /// 需要转换文字编码的文件名(包含绝对路径) public static bool MojiCodeChange(string filePath) { try { // 读文件 string str; var aa = GetEncoding(filePath); using (StreamReader sr = new StreamReader(filePath, aa)) { str = sr.ReadToEnd(); sr.Close(); } // 重写文件(以gb2312带BOM格式) using (StreamWriter sw = new StreamWriter(filePath, false, new UTF8Encoding(true))) { sw.Write(str); sw.Close(); } } catch (System.Exception) { return false; } return true; } public static void readExcel(string path, int cellcount , int rowcount , ref List datares) { var workbook = new XLWorkbook(path); IXLWorksheet XLWorksheet = workbook.Worksheet(1); for (int i = 3; i <= rowcount; i++) { int ii = 1; T_xxxw_csvdata txd = new T_xxxw_csvdata(); Type t = txd.GetType();//获得该类的Type foreach (PropertyInfo pi in t.GetProperties()) { if (pi.Name == "Listid") { pi.SetValue(txd, UUID); } else { if (pi.Name != "Id") { pi.SetValue(txd, XLWorksheet.Row(i).Cell(ii++).Value.ToString()); } } } datares.Add(txd); } } } }