123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805 |
- using CefSharp;
- using CefSharp.WinForms;
- using Newtonsoft.Json;
- using NPOI.SS.UserModel;
- using NPOI.XSSF.UserModel;
- using OTSIncAReportApp.DataOperation.DataAccess;
- using OTSIncAReportApp.OTSRstMgrFunction;
- using OTSIncAReportApp.OTSSampleReportInfo;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Runtime.Serialization;
- using System.Windows.Forms;
- namespace OTSIncAReportApp.Control_ECharts
- {
- /// <summary>
- /// 三元相图EChart版
- /// </summary>
- public partial class EChart_Trianglediagram : UserControl
- {
- #region 变量定义
- public List<string> m_list_string_sizelevel; //图例中:颗粒粒级字符列表
- public List<string> m_old_list_string_sizelevel;//图例中,颗粒粒级字符列表,未处理格式的,从底层拿出来的原始格式
- public List<string> m_list_string_samplename;//图例中:样品名字符列表
- private DataTable TernaryData = new DataTable();//当前三元图的数据
- private List<string> TernaryName = new List<string>();//三元图名称
- public string Template { get; set; }
- public int condition = -1;
- /// <summary>
- /// 全局函数,与json数据对应的类结构
- /// </summary>
- List<TriangleJsonClass> m_list_trianglejsonclass = null;
- string url = "CefSharp\\Resources/HTML/charts.html";
- frmReportApp m_ReportApp;
- frmReportConditionChoose m_condition;
- ResultDataMgr m_DataMgr;
- private bool ReportExporting = false;
- public bool Report { set; get; }
- /// <summary>
- /// 判断颗粒范围(true全部颗粒,false选择颗粒)
- /// </summary>
- public bool ParticleRange { set; get; }
- #endregion
- #region 构造函数及窗体加载
- /// <summary>
- /// 三角图,构造函数
- /// </summary>
- /// <param name="in_sec">传入,委托类对象</param>
- /// <param name="in_Cotsreportprojfilemgrclr">传入,项目管理类对象</param>
- public EChart_Trianglediagram(frmReportApp ReportApp)
- {
- m_list_trianglejsonclass = new List<TriangleJsonClass>();
- m_list_string_sizelevel = new List<string>();
- m_list_string_samplename = new List<string>();
- m_old_list_string_sizelevel = new List<string>();
- m_ReportApp = ReportApp;
- m_condition = ReportApp.m_conditionChoose;
- m_DataMgr = ReportApp.m_rstDataMgr;
- InitializeComponent();
- }
- /// <summary>
- /// 三角图,构造函数
- /// </summary>
- /// <param name="in_sec">传入,委托类对象</param>
- /// <param name="in_Cotsreportprojfilemgrclr">传入,项目管理类对象</param>
- public EChart_Trianglediagram(frmReportApp ReportApp, string Templates)
- {
- m_list_trianglejsonclass = new List<TriangleJsonClass>();
- m_list_string_sizelevel = new List<string>();
- m_list_string_samplename = new List<string>();
- m_old_list_string_sizelevel = new List<string>();
- Template = Templates;
- m_ReportApp = ReportApp;
- m_condition = ReportApp.m_conditionChoose;
- m_DataMgr = ReportApp.m_rstDataMgr;
- ReportExporting = true;
- InitializeComponent();
- }
- private void EChart_Trianglediagram_Load(object sender, EventArgs e)
- {
- TernaryData.Columns.Add("A");
- TernaryData.Columns.Add("B");
- TernaryData.Columns.Add("C");
- TernaryData.Columns.Add("DMAX");
- TernaryData.Columns.Add("DMIN");
- string template = Template;
- TernaryName.Clear();
- if (template == "")
- { //三元相图模板
- template = m_condition.m_conditionData.GetPropItemDisplayValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE).ToString();
- }
- //获取粒级表
- string pathtpf = Application.StartupPath + "\\Config\\ProData\\DefaultTriTemplateFile.tpf";
- List<string> nameList = new List<string>();
- DataSet ds = XMLoperate.GetXmlData(pathtpf, "XMLData");
- DataTable dt = ds.Tables["Member"];
- string TemplateName = "";
- //遍历第一层节点
- foreach (DataRow element in dt.Rows)
- {
- TemplateName = element["TemplateName"].ToString();
- if (TemplateName == template)
- {
- string Element = element["Element"].ToString();
- nameList.Add(Element.Split('.')[0]);
- nameList.Add(Element.Split('.')[1]);
- nameList.Add(Element.Split('.')[2]);
- TernaryName.Add(template.Split('.')[0]);
- TernaryName.Add(template.Split('.')[1]);
- TernaryName.Add(template.Split('.')[2]);
- break;
- }
- }
- //for (int i=0;i< nameList.Count;i++)
- //{
- // TernaryName.Add(nameList[i]);
- //}
- //将所有的测量结果名添加到list中
- m_list_string_samplename.Clear();
- string sou = "";
- int sel = 0;
- if (Report)
- {
- sou = m_DataMgr.ResultFilesList[m_DataMgr.GetWorkingResultId()].anotherFileName.ToString();
- if(ParticleRange)
- {
- sel = 0;
- }
- else
- {
- sel = 1;
- }
- }
- else
- {
- sou = m_condition.m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE].itemDisplayVal.ToString();
- //判断颗粒范围(全部颗粒或者选择颗粒)
- sel = m_ReportApp.m_conditionChoose.m_conditionData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
- }
- Report = false;
-
- if (sou.Contains("+"))
- {
- if (m_ReportApp.more)
- {
- m_ReportApp.trans = false;
- }
- else
- {
- m_ReportApp.trans = true;
- }
- for (int i = 0; i < sou.Split('+').Length; i++)
- {
- ResultFile resultFile = m_DataMgr.ResultFilesList.Find(s => s.anotherFileName == sou.Split('+')[i]);
- if (resultFile == null)
- {
- continue;
- }
- TriangleJsonClass cl = GettriangleJsonClass(resultFile.FilePath, resultFile.anotherFileName, nameList, TemplateName,sel);
- m_list_trianglejsonclass.Add(cl);
- }
- }
- else
- {
- if (!m_ReportApp.more)
- {
- m_ReportApp.trans = false;
- }
- else
- {
- m_ReportApp.trans = true;
- }
- m_ReportApp.more = false;
- ResultFile resultFile;
- int index = (int)m_condition.m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE].itemVal;
- if (ReportExporting)
- {
- resultFile = m_DataMgr.ResultFilesList[m_DataMgr.GetWorkingResultId()];
- }
- else
- {
- //resultFile = m_DataMgr.ResultFilesList[m_DataMgr.GetWorkingResult()];
- resultFile = m_DataMgr.ResultFilesList[index];
- }
- ReportExporting = false;
- TriangleJsonClass cl = GettriangleJsonClass(resultFile.FilePath, resultFile.anotherFileName, nameList, TemplateName,sel);
- m_list_trianglejsonclass.Add(cl);
- }
- //使用EChart进行显示
- if (m_list_trianglejsonclass.Count > 1)
- {
- List<Chartdate> list = new List<Chartdate>();
- for (int i = 0; i < m_list_trianglejsonclass.Count; i++)
- {
- //拼写Json数据
- Chartdate list_json_str = SpellTriangleJson(m_list_trianglejsonclass[i]);
- list.Add(list_json_str);
- }
- url = "CefSharp\\Resources/HTML/chartsMore.html";
- m_ReportApp.data = JsonConvert.SerializeObject(list);
- }
- else
- {
- //拼写Json数据
- Chartdate list_json_str = SpellTriangleJson(m_list_trianglejsonclass[0]);
- url = "CefSharp\\Resources/HTML/charts.html";
- m_ReportApp.data = JsonConvert.SerializeObject(list_json_str);
- }
- InitBrowser();
- }
- private TriangleJsonClass GettriangleJsonClass(string path, string name, List<string> nameList, string templatename,int sel)
- {
- TernaryData.Rows.Clear();
- TriangleJsonClass triangleJsonClass = new TriangleJsonClass();
- m_list_string_samplename.Add(name);
- List<string> list_string_sort = new List<string>();
- List<double[]> list_point_sort = new List<double[]>();
- DataTable particles = GetParticles(path, nameList,sel);
- foreach (DataRow item in particles.Rows)
- {
- if (item["particleLocation"].ToString() == "0,0,0")
- {
- continue;
- }
- list_string_sort.Add(item["sizeLevel"].ToString());
- double top = Convert.ToDouble(item["top"]);
- double left = Convert.ToDouble(item["left"]);
- double right = Convert.ToDouble(item["right"]);
- //x=right+top/2,y=(√3/2)*top
- double Y = 0.866 * top * 100;
- double X = (right + top / 2) * 100;
- double[] point = { Math.Round(X, 2), Math.Round(Y) };
- list_point_sort.Add(point);
- DataRow dr = TernaryData.NewRow();
- dr["A"] = top.ToString();
- dr["B"] = left.ToString();
- dr["C"] = right.ToString();
- dr["DMAX"] = item["DMAX"].ToString();
- dr["DMIN"] = item["DMIN"].ToString();
- TernaryData.Rows.Add(dr);
- }
- triangleJsonClass = new TriangleJsonClass()
- {
- Samplename = name,
- TopName = templatename.Split('.')[0],
- LeftName = templatename.Split('.')[1],
- RightName = templatename.Split('.')[2],
- ListPartSize = list_string_sort,
- ListPointF = list_point_sort
- };
- return triangleJsonClass;
- }
- /// <summary>
- /// 导出Excel数据
- /// </summary>
- private void ExportExcelDocument()
- {
- // 创建一个SaveFileDialog实例
- SaveFileDialog saveFileDialog = new SaveFileDialog();
- // 设置对话框的标题
- saveFileDialog.Title = "选择Excel文件保存位置";
- // 设置默认的文件扩展名为.xlsx
- saveFileDialog.DefaultExt = "xlsx";
- // 设置过滤器,限制用户可以选择的文件类型为Excel文件
- saveFileDialog.Filter = "Excel文件 (*.xlsx)|*.xlsx";
- // 显示对话框并检查用户是否点击了“保存”按钮
- if (saveFileDialog.ShowDialog() == DialogResult.OK)
- {
- // 获取用户选择的文件路径
- string filePath = saveFileDialog.FileName;
- // 调用导出方法
- ExportDataTableToExcel(TernaryData, filePath);
- }
- }
- //获取颗粒信息
- private DataTable GetParticles(string filepath, List<string> nameList,int sel)
- {
- ParticleData particledata = new ParticleData(filepath);
- //设置标签名称
- List<string> listName = new List<string>();
- //获取粒级表
- string pathe = m_DataMgr.m_RptConfigFile.PartSizeFileFolder + m_DataMgr.m_RptConfigFile.PartSizeFile;
- DataSet ds = XMLoperate.GetXml(pathe);
- string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
- for (int i = 0; i < sizestr.Split(',').Length - 1; i++)
- {
- if (sizestr.Split(',')[i].Length > 0)
- {
- double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
- double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
- listName.Add(d1.ToString() + "~" + d2.ToString());
- }
- }
- double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
- listName.Add(d.ToString() + "~MAX");
- string filedAndParticl = "";
- string po = "";
- string con = "";
- int row = m_condition.m_conditionData.ConditionItemList.Count;
- if (condition != -1)
- {
- List<string> li = new List<string>() { "DMAX", "DMIN", "Area", "FERET" };
- con = li[condition];
- }
- else
- {
- if (row < 4)
- {
- con = "DMAX";
- }
- else
- {
- con = m_condition.m_conditionData.GetPropItemDisplayValueByPropItemName( OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE).ToString();
- }
- }
- switch (con)
- {
- case "DMAX":
- po = "DMAX";
- break;
- case "DMIN":
- po = "DMIN";
- break;
- case "ECD":
- po = "Area";
- break;
- case "FERET":
- po = "DFERET";
- break;
- }
- //particledata.GetParticleAllHaveXray("");
- //DataTable dtp = particledata.GetParticleHaveXray(filedAndParticl);//旧
- DataTable dtp = particledata.GetParticleAllHaveXray(filedAndParticl);//新
- //创建一个临时表
- DataTable ret_dt = new DataTable();
- //然后额外存放三列,用于存放拆分后三个顶点的值
- ret_dt.Columns.Add("sizeLevel");
- ret_dt.Columns.Add("particleLocation");
- ret_dt.Columns.Add("top");
- ret_dt.Columns.Add("left");
- ret_dt.Columns.Add("right");
- ret_dt.Columns.Add("Color_position");
- ret_dt.Columns.Add("DMAX");
- ret_dt.Columns.Add("DMIN");
- for (int k = 0; k < listName.Count; k++)
- {
- string str = listName[k];
- string d1 = str.Split('~')[0];
- string d2 = str.Split('~')[1];
- if (d2 == "MAX")
- {
- d2 = "999";
- }
- DataRow[] datas = dtp.Select(getWhere(d2, d1, po));
- foreach (var item in datas)
- {
- DataRow dr = ret_dt.NewRow();
- dr["sizeLevel"] = str;
- string element = item["Element"].ToString();
- string strRet = getStrRet(nameList, element);
- dr["particleLocation"] = strRet;
- dr["top"] = strRet.Split(',')[0];
- dr["left"] = strRet.Split(',')[1];
- dr["right"] = strRet.Split(',')[2];
- dr["Color_position"] = k.ToString();
- string strDMAX = item["DMAX"].ToString();
- string strDMIN = item["DMIN"].ToString();
- dr["DMAX"] = strDMAX;
- dr["DMIN"] = strDMIN;
- ret_dt.Rows.Add(dr);
- }
- }
- return ret_dt;
- }
- private string getWhere(string max, string min, string col)
- {
- return col + ">=" + min + " and " + col + "<=" + max;
- }
- private string getStrRet(List<string> template, string element)
- {
- List<string> name = new List<string>()
- { "h","he",
- "li","be","b","c","n","o","f","ne",
- "na","mg","al","si","p","s","cl","ar",
- "k","ca","sc","ti","v","cr","mn","fe","co","ni","cu","zn","ga","ge","as","se","br","kr",
- "rb","sr","y","zr","nb","mo","tc","ru","rh","pd","ag","cd","in","sn","sb","te","i","xe",
- "cs","ba","la",
- "ce","pr","nd","pm","sm","eu","gd","tb","dy","ho","er","tm","yb","lu",
- "hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn",
- "fr","ra","ac",
- "th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr"
- };
- List<double> value = new List<double>()
- { 1.008,4.003,
- 6.941,9.012,10.811,12.011,14.007,15.999,18.998,20.180,
- 22.990,24.305,26.982,28.086,30.974,32.066,35.453,39.948,
- 39.098,40.08,44.956,47.88,50.942,51.996,54.938,55.847,58.933,58.70,63.546,65.39,69.72,72.61,74.922,78.96,79.904,83.80,
- 85.468,87.62,88.906,91.22,92.906,95.94,98.00,101.07,102.906,106.42,107.868,112.41,114.82,118.71,121.76,127.60,126.905,131.29,
- 132.905,137.33,138.906,
- 140.12,140.908,144.24,145.0,150.36,151.97,157.25,158.925,162.50,64.93,167.26,168.934,173.04,174.967,
- 178.49,180.948,183.85,186.207,190.20,192.22,195.08,196.967,200.59,204.38,207.2,208.980,209.00,210.00,222.00,
- 223.00,226.025,227.028,
- 232.038,231.036,238.029,237.048,244.00,243.00,247.00,247.00,251.00,252.00,257.00,258.00,259.00,260.00
- };
- double d_ASum = 0;
- double d_BSum = 0;
- double d_CSum = 0;
- string aElements = template[0];
- string bElements = template[1];
- string cElements = template[2];
- foreach (var item in element.Split(';'))
- {
- if (item.Contains(aElements + "-"))
- {
- if (aElements != "")
- {
- d_ASum = Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(aElements.ToLower())];
- }
- }
- for (int i = 0; i < bElements.Split(',').Length; i++)
- {
- string e = bElements.Split(',')[i];
- if (item.Contains(e + "-"))
- {
- d_BSum = d_BSum + Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(e.ToLower())];
- }
- }
- if (item.Contains(cElements + "-"))
- {
- if (cElements != "")
- d_CSum = Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(cElements.ToLower())];
- }
- }
- double allNums = d_ASum + d_BSum + d_CSum;
- string strRet = "";
- if ((allNums) == 0)
- {
- strRet = "0,0,0";
- }
- else
- {
- double aPercent = 0, bPercent = 0, cPercent = 0;
- if (d_ASum != 0)
- {
- aPercent = d_ASum / allNums;
- }
- if (d_BSum != 0)
- {
- bPercent = d_BSum / allNums;
- }
- if (d_CSum != 0)
- {
- cPercent = d_CSum / allNums;
- }
- strRet = aPercent.ToString() + "," + bPercent.ToString() + "," + cPercent.ToString();
- }
- return strRet;
- }
- class Chartdate
- {
- public string Samplename { get; set; }
- public string LeftName { get; set; }
- public string RightName { get; set; }
- public string TopName { get; set; }
- public List<string> ListPartSize { get; set; }
- public List<List<double[]>> ListPoint { get; set; }
- }
- #endregion
- #region echarts
- //定义图片
- //JsEvent js;
- //定义图片base64
- public string pic { get; set; }
- //定义图形类型
- public string type { get; set; }
- //获取图片
- private void button1_Click(object sender, EventArgs e)
- {
- //string str = GetPic();
- //pic = str;
- }
- /// <summary>
- /// 加载浏览器
- /// </summary>
- public void InitBrowser()
- {
-
- //加载网页
- if (m_ReportApp.browser_trio == null || m_ReportApp.trans)
- {
- // 获取生成路径下网页文件的绝对路径
- string fileName = Path.Combine(Directory.GetCurrentDirectory(), url);
- //加载网页
- m_ReportApp.browser_trio = new ChromiumWebBrowser(fileName);
- //禁止网页
- m_ReportApp.browser_trio.MenuHandler = new MenuHandler();
- m_ReportApp.browser_trio.Dock = DockStyle.Fill;
- //添加网页到当前自定义控件
- //this.Controls.Add(m_ReportApp.browser_trio);
- this.panel1.Controls.Add(m_ReportApp.browser_trio);
- m_ReportApp.js.MessageText = "";
- //供页面调用以传递数据
- m_ReportApp.browser_trio.RegisterJsObject("jsObj", m_ReportApp.js, false);
- //升级cef版本后新方法
- //CefSharpSettings.LegacyJavascriptBindingEnabled = true;
- //CefSharpSettings.WcfEnabled = true;
- //m_ReportApp.browser_trio.JavascriptObjectRepository.Register("jsObj", m_ReportApp.js, isAsync: false, options: BindingOptions.DefaultBinder);
- //网页加载结束后调用事件
- m_ReportApp.browser_trio.FrameLoadEnd += WebBrowser_FrameLoadEnd;
- }
- else
- {
- m_ReportApp.browser_trio.ResetText();
- m_ReportApp.browser_trio.Reload();
- m_ReportApp.browser_trio.Refresh();
- //供页面调用以传递数据
- //this.Controls.Add(m_ReportApp.browser_trio);
- this.panel1.Controls.Add(m_ReportApp.browser_trio);
- }
- if (m_ReportApp.timerKG)
- {
- timer1.Enabled = true;
- }
- }
- /// <summary>
- /// 页面加载结束后事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void WebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
- {
- if (e.Frame.IsMain)
- {
- //为页面图形提供数据参数
- string str = m_ReportApp.data;
- //执行网页脚本事件
- m_ReportApp.browser_trio.ExecuteScriptAsync("showchart('" + str + "','','triangle')");
- }
- }
- private void ExportDataTableToExcel(DataTable dataTable, string filePath)
- {
- // 创建一个新的工作簿
- IWorkbook workbook = new XSSFWorkbook(); // 对于.xlsx格式
- // IWorkbook workbook = new HSSFWorkbook(); // 对于.xls格式
- // 添加一个新的工作表
- ISheet sheet = workbook.CreateSheet("Sheet1");
- // 创建表头行(第一行)
- IRow headerRow = sheet.CreateRow(0);
- ICell cell1 = headerRow.CreateCell(0);
- cell1.SetCellValue(TernaryName[0].ToString());
- ICell cell2 = headerRow.CreateCell(1);
- cell2.SetCellValue(TernaryName[1].ToString());
- ICell cell3 = headerRow.CreateCell(2);
- cell3.SetCellValue(TernaryName[2].ToString());
- ICell cell4 = headerRow.CreateCell(3);
- cell4.SetCellValue("DMAX");
- ICell cell5 = headerRow.CreateCell(4);
- cell5.SetCellValue("DMIN");
- //for (int i = 0; i < dataTable.Columns.Count; i++)
- //{
- // ICell cell = headerRow.CreateCell(i);
- // cell.SetCellValue(dataTable.Columns[i].ColumnName);
- //}
- // 填充数据行
- for (int i = 0; i < dataTable.Rows.Count; i++)
- {
- IRow row = sheet.CreateRow(i + 1);
- for (int j = 0; j < dataTable.Columns.Count; j++)
- {
- ICell cell = row.CreateCell(j);
- if (dataTable.Rows[i][j] != DBNull.Value)
- {
- cell.SetCellValue(dataTable.Rows[i][j].ToString());
- }
- }
- }
- // 自动调整列宽(可选)
- // 注意:NPOI的AutoSizeColumn方法不如EPPlus的AutoFitColumns方法那样精确
- // 你可能需要手动设置列宽或者接受默认的宽度
- // 但以下是一个尝试自动调整列宽的示例,它可能不完全符合你的期望
- for (int i = 0; i < dataTable.Columns.Count; i++)
- {
- sheet.AutoSizeColumn(i);
- // 或者,你可以设置一个固定的宽度(以字符为单位)
- // sheet.SetColumnWidth(i, 20 * 256); // 20是字符宽度,256是转换因子
- }
- // 保存Excel文件
- using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
- {
- workbook.Write(fileStream);
- }
- // 释放资源(对于.xlsx格式,通常不需要显式调用Dispose,因为XSSFWorkbook实现了IDisposable但内部已经处理了资源释放)
- // 但为了良好的编程习惯,你可以显式调用(尽管这里不是必需的)
- // workbook.Dispose(); // 如果你使用的是实现了IDisposable的对象,并且想确保资源被释放
- }
- //public string GetPic()
- //{
- // return js.MessageText;
- //}
- //禁止网页操作,右键点击等
- class MenuHandler : CefSharp.IContextMenuHandler
- {
- void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model)
- {
- model.Clear();
- }
- bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags)
- {
- //throw new NotImplementedException();
- return false;
- }
- void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame)
- {
- //throw new NotImplementedException();
- }
- bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback)
- {
- return false;
- }
- }
- class JsEvent
- {
- public string MessageText { set; get; }
- public void ShowTest()
- {
- MessageBox.Show(MessageText);
- }
- }
- #endregion
- #region 自定义方法
- /// <summary>
- /// 拼写json数据
- /// </summary>
- /// <returns></returns>
- private Chartdate SpellTriangleJson(TriangleJsonClass in_trianglejsonclass)
- {
- Chartdate chart = new Chartdate();
- chart.LeftName = in_trianglejsonclass.LeftName;
- chart.RightName = in_trianglejsonclass.RightName;
- chart.TopName = in_trianglejsonclass.TopName;
- chart.Samplename = in_trianglejsonclass.Samplename;
- List<string> str_listpartsize = new List<string>();
- List<List<double[]>> str_listpoint = new List<List<double[]>>();
- for (int i = 0; i < in_trianglejsonclass.ListPartSize.Count; i++)
- {
- //如果未包含该粒级
- if (!str_listpartsize.Contains(in_trianglejsonclass.ListPartSize[i]))
- {
- //第一步先添加该粒级
- str_listpartsize.Add(in_trianglejsonclass.ListPartSize[i]);
- }
- }
- //第二步再添加所有该粒级对应的坐标,到一个分组中
- for (int i = 0; i < str_listpartsize.Count; i++)
- {
- List<double[]> point = new List<double[]>();
- for (int k = 0; k < in_trianglejsonclass.ListPointF.Count; k++)
- {
- if (str_listpartsize[i] == in_trianglejsonclass.ListPartSize[k])
- {
- point.Add(in_trianglejsonclass.ListPointF[k]);
- }
- }
- str_listpoint.Add(point);
- }
- chart.ListPartSize = str_listpartsize;
- chart.ListPoint = str_listpoint;
- return chart;
- }
- #endregion
- #region EChart导出图像委托调用部份
- public delegate void MyDelgate(string va);
- public event MyDelgate butclic;
- private void timer1_Tick(object sender, EventArgs e)
- {
- if (butclic == null)
- return;
- if (m_ReportApp.js == null)
- return;
- if (m_ReportApp.js.MessageText == null)
- return;
- if (m_ReportApp.js.MessageText != "")
- {
- butclic(m_ReportApp.js.MessageText);
- timer1.Enabled = false;
- m_ReportApp.timerKG = false;
- m_ReportApp.js.MessageText = "";
- }
- }
- [DataContract]
- public class TriangleJsonClass
- {
- [DataMember]
- public string Samplename { set; get; }
- [DataMember]
- public string TopName { set; get; }
- [DataMember]
- public string LeftName { set; get; }
- [DataMember]
- public string RightName { set; get; }
- [DataMember]
- public List<string> ListPartSize { set; get; }
- [DataMember]
- public List<double[]> ListPointF { set; get; }
- }
- #endregion
- private void button1_Click_1(object sender, EventArgs e)
- {
- ExportExcelDocument();
- }
- }
- }
|