|
@@ -1,7 +1,8 @@
|
|
|
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;
|
|
@@ -25,6 +26,8 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
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;
|
|
@@ -85,7 +88,15 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
}
|
|
|
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();
|
|
@@ -108,10 +119,17 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
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 = "";
|
|
@@ -186,9 +204,6 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
ReportExporting = false;
|
|
|
TriangleJsonClass cl = GettriangleJsonClass(resultFile.FilePath, resultFile.anotherFileName, nameList, TemplateName,sel);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
m_list_trianglejsonclass.Add(cl);
|
|
|
}
|
|
|
|
|
@@ -215,12 +230,12 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
}
|
|
|
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);
|
|
@@ -244,6 +259,14 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
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()
|
|
@@ -258,12 +281,31 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
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)
|
|
@@ -287,9 +329,6 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
}
|
|
|
double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
|
|
|
listName.Add(d.ToString() + "~MAX");
|
|
|
- //int sel = m_ReportApp.m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
|
|
|
- //int sel = m_condition.SourceGridData.ConditionItemList[m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE)].comboDownList.IndexOf(m_ReportApp.SourceGridData.ConditionItemList[1].itemVal.ToString());
|
|
|
- //int sel = m_condition.m_SourceGridData.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
|
|
|
string filedAndParticl = "";
|
|
|
string po = "";
|
|
|
string con = "";
|
|
@@ -342,6 +381,8 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
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++)
|
|
|
{
|
|
@@ -365,6 +406,10 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
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);
|
|
|
}
|
|
|
|
|
@@ -486,6 +531,7 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
//pic = str;
|
|
|
|
|
|
}
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 加载浏览器
|
|
|
/// </summary>
|
|
@@ -503,7 +549,10 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
m_ReportApp.browser_trio.MenuHandler = new MenuHandler();
|
|
|
m_ReportApp.browser_trio.Dock = DockStyle.Fill;
|
|
|
//添加网页到当前自定义控件
|
|
|
- this.Controls.Add(m_ReportApp.browser_trio);
|
|
|
+ //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);
|
|
@@ -514,6 +563,7 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
|
|
|
//网页加载结束后调用事件
|
|
|
m_ReportApp.browser_trio.FrameLoadEnd += WebBrowser_FrameLoadEnd;
|
|
|
+
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -522,7 +572,9 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
m_ReportApp.browser_trio.Refresh();
|
|
|
|
|
|
//供页面调用以传递数据
|
|
|
- this.Controls.Add(m_ReportApp.browser_trio);
|
|
|
+ //this.Controls.Add(m_ReportApp.browser_trio);
|
|
|
+ this.panel1.Controls.Add(m_ReportApp.browser_trio);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
if (m_ReportApp.timerKG)
|
|
@@ -545,6 +597,70 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
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;
|
|
@@ -681,5 +797,9 @@ namespace OTSIncAReportApp.Control_ECharts
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
+ private void button1_Click_1(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ ExportExcelDocument();
|
|
|
+ }
|
|
|
}
|
|
|
}
|