using DevExpress.Utils.Drawing.Helpers; using ICSharpCode.Core; using Mesnac.Action.Base; using Mesnac.Action.ChemicalWeighing.Entity.Report; using Mesnac.Action.ChemicalWeighing.Report.ProductionReport; using Microsoft.Office.Interop.Excel; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Mesnac.Action.ChemicalWeighing.Report.WetMixer { /// /// 湿混机报表导出事件 /// public class ExportAction : ChemicalWeighingAction, Base.IAction { private Control _clientGridControl = null; //报表明细DGV private DbMCControl _dgvWetMixer = null; //报表数据DGV public void Run(RuntimeParameter runtime) { base.RunIni(runtime); //必须要调用的 ICSharpCode.Core.LoggingService.Debug("湿混机报表-导出..."); this._dgvWetMixer = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Report_WetMixer").FirstOrDefault(); DataGridView _WetMixerGridView = this._dgvWetMixer.BaseControl as DataGridView; if (_WetMixerGridView != null) { WetMixerDevice wetMixerDevice = new WetMixerDevice(); wetMixerDevice.eqNo = ParseToInt(_WetMixerGridView.SelectedRows[0].Cells["eqNo"].Value.ToString()); wetMixerDevice.recordTime = _WetMixerGridView.SelectedRows[0].Cells["recordTime"].Value.ToString(); SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "xls files(*.xls)|*.xls"; sfd.FileName = String.Format("湿混机报表_{0:yyyyMMdd}", DateTime.Now); sfd.AddExtension = true; DialogResult result = sfd.ShowDialog(); if (result == DialogResult.OK) { this._clientGridControl = GetAllControls().Where(x => x.Name.Contains("MultiColHeaderDgv")).FirstOrDefault(); if (_clientGridControl == null) { ICSharpCode.Core.LoggingService.Warn("{生产报表} 缺少缺少称量名细MultiColHeaderDgv控件..."); runtime.IsReturn = false; return; } Mesnac.Controls.Default.MultiColHeaderDgv clientGrid = (this._clientGridControl as Mesnac.Controls.Default.MultiColHeaderDgv); System.Data.DataTable dt = clientGrid.DataSource as System.Data.DataTable; string fileName = sfd.FileName; if (!String.IsNullOrEmpty(fileName)) { try { //写入Excle DataTabletoExcel(fileName, dt, wetMixerDevice); string msg1 = "湿混机报表导出成功"; //导出生产报表数据至Excel成功! ICSharpCode.Core.LoggingService.Info(msg1); MessageBox.Show(msg1, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { string msg1 = $"湿混机报表导出异常:{ex.Message}"; ICSharpCode.Core.LoggingService.Error(msg1); MessageBox.Show(msg1, Mesnac.Basic.LanguageHelper.WarnCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } } } /// /// 写入到Excel文件 /// /// /// /// public void DataTabletoExcel(string strFileName, System.Data.DataTable tmpDataTable, WetMixerDevice wetMixerDevice) { ///先得到datatable的行数 int rowNum = tmpDataTable.Rows.Count; ///列数 int columnNum = tmpDataTable.Columns.Count; ///声明一个应用程序类实例 Microsoft.Office.Interop.Excel.Application xlApp = new ApplicationClass(); //创建一个新工作簿 Workbook xlBook = xlApp.Workbooks.Add(); ///在工作簿中得到sheet。 _Worksheet oSheet = (_Worksheet)xlBook.Worksheets[1]; #region 绘制列 //绘制配方名和开始时间 oSheet.Cells[1, 1] = "设备"; oSheet.Cells[1, 2] = "记录时间"; oSheet.Cells[2, 1] = wetMixerDevice.eqNo; oSheet.Cells[2, 2] = wetMixerDevice.recordTime; //自定义方法,绘制合并表头 oSheet.Cells[3, 1] = "设备"; oSheet.Cells[3, 2] = "Mix"; oSheet.Cells[3, 3] = "批次"; oSheet.Cells[3, 4] = "步号"; oSheet.Cells[3, 5] = "动作"; oSheet.Cells[3, 6] = "时间"; oSheet.Cells[3, 7] = "温度"; oSheet.Cells[3, 8] = "速度"; oSheet.Cells[3, 9] = "记录时间"; #endregion //将DataTable中的数据导入Excel中 for (int i = 0; i < rowNum; i++) { for (int j = 0; j < columnNum; j++) { ///excel中的列是从1开始的 xlApp.Cells[i + 4, j + 1] = tmpDataTable.Rows[i][j].ToString(); } } oSheet.SaveAs(strFileName); } /// /// 字符串转Int /// /// /// private int ParseToInt(string str) { int returnInt = 0; if (str == null || str.Trim().Length < 1) { return returnInt; } if (int.TryParse(str, out returnInt)) { return returnInt; } else { return 0; } } } }