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;
}
}
}
}