186 lines
6.4 KiB
C#
186 lines
6.4 KiB
C#
using DeviceRepair.Models;
|
|
using DeviceRepair.Models.Enum;
|
|
using NPOI.SS.UserModel;
|
|
using NPOI.SS.Util;
|
|
using NPOI.XSSF.UserModel;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
|
|
namespace TsSFCDevice.Client.Launch.Plan
|
|
{
|
|
public partial class xucPlanImport : DevExpress.XtraEditors.XtraUserControl
|
|
{
|
|
public EnumDeviceBelong Belong = EnumDeviceBelong.PM;
|
|
|
|
public delegate void ShowLogEventHandler();
|
|
public event ShowLogEventHandler ShowLogs;
|
|
|
|
public DevExpress.XtraLayout.Utils.LayoutVisibility LogIsVisibility
|
|
{
|
|
set { layoutControlItem4.Visibility = value; }
|
|
}
|
|
|
|
public DateTime? PlanYear { get { return Convert.ToDateTime(deMaintenanceYear.EditValue); } }
|
|
|
|
public string FilePath { get { return btnSelectFilePath.EditValue + ""; } }
|
|
|
|
public xucPlanImport()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void xucPlanImport_Load(object sender, EventArgs e)
|
|
{
|
|
deMaintenanceYear.EditValue = DateTime.Today;
|
|
this.layoutControl1.AllowCustomization = false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 选择文件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void btnSelectFilePath_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
|
|
{
|
|
using (DevExpress.XtraEditors.XtraOpenFileDialog xofd = new DevExpress.XtraEditors.XtraOpenFileDialog())
|
|
{
|
|
xofd.Filter = "(*.xlsx)|*.xlsx";
|
|
if (xofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
|
{
|
|
string targetPath = xofd.FileName;
|
|
btnSelectFilePath.Text = targetPath;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 模板下载
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void hyperlinkLabelControl1_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
using (DevExpress.XtraEditors.XtraSaveFileDialog xsfd = new DevExpress.XtraEditors.XtraSaveFileDialog())
|
|
{
|
|
xsfd.Filter = "(*.xlsx)|*.xlsx";
|
|
if (xsfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
|
{
|
|
string targetPath = xsfd.FileName;
|
|
OutExcel(targetPath);
|
|
XtraMessageBoxHelper.Info("导出成功!");
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
XtraMessageBoxHelper.Error(ex.Message);
|
|
}
|
|
}
|
|
|
|
public void ErrorLogs()
|
|
{
|
|
ShowLogs?.Invoke();
|
|
}
|
|
|
|
Dictionary<string, string> keyValuePairs;
|
|
/// <summary>
|
|
/// 反射model类键值对
|
|
/// </summary>
|
|
void KeyValuePairsBind()
|
|
{
|
|
if (keyValuePairs == null || keyValuePairs.Count == 0)
|
|
{
|
|
if (keyValuePairs == null)
|
|
keyValuePairs = new Dictionary<string, string>();
|
|
|
|
PropertyInfo[] properties = typeof(DriveMaintenancePlanExcelModel).GetProperties();
|
|
foreach (PropertyInfo item in properties)
|
|
{
|
|
DisplayNameAttribute[] attrs =
|
|
(DisplayNameAttribute[])item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
|
|
keyValuePairs.Add(item.Name, attrs[0].DisplayName);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 导出模板
|
|
/// </summary>
|
|
/// <param name="savePath"></param>
|
|
void OutExcel(string savePath)
|
|
{
|
|
// 创建Excel工作簿和工作表
|
|
IWorkbook workbook = new XSSFWorkbook();
|
|
ISheet sheet = workbook.CreateSheet($"OEM设备AM计划");
|
|
ISheet sheet2 = workbook.CreateSheet($"选项列表");
|
|
|
|
//读取Model属性生成键值对
|
|
KeyValuePairsBind();
|
|
|
|
// 写入表头
|
|
IRow headerRow = sheet.CreateRow(0);
|
|
int index = 0;
|
|
|
|
// 创建一个下拉框选项列表
|
|
string[] options = new string[] { };
|
|
if (Belong == EnumDeviceBelong.AM)
|
|
{
|
|
options = new string[] { "", "Daily" };
|
|
}
|
|
else if (Belong == EnumDeviceBelong.PM)
|
|
{
|
|
options = new string[] { "", "Monthly", "Annual", "Quarterly", "Semi-an" };
|
|
}
|
|
|
|
// 设置下拉框选项为字符串类型
|
|
IRow row = sheet2.CreateRow(0);
|
|
for (int i = 0; i < options.Length; i++)
|
|
{
|
|
ICell cell = row.CreateCell(i);
|
|
cell.SetCellValue(options[i]);
|
|
}
|
|
|
|
// 创建下拉框选项列表
|
|
var validationHelper = sheet.GetDataValidationHelper();
|
|
IDataValidationConstraint constraint = validationHelper.CreateExplicitListConstraint(options);
|
|
|
|
int StartCellIndex = 0, EndCellIndex = 0;
|
|
foreach (KeyValuePair<string, string> item in keyValuePairs)
|
|
{
|
|
if (item.Key == "Jan")
|
|
StartCellIndex = index;
|
|
else if (item.Key == "Dec")
|
|
EndCellIndex = index;
|
|
|
|
headerRow.CreateCell(index).SetCellValue(item.Value);
|
|
index++;
|
|
}
|
|
|
|
CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 1048575, StartCellIndex, EndCellIndex); // 从第二行开始到最后一行,第一列
|
|
IDataValidation dataValidation = validationHelper.CreateValidation(constraint, cellRangeAddressList);
|
|
dataValidation.ShowErrorBox = true;
|
|
// 将下拉框数据验证对象应用到整列的每个单元格
|
|
sheet.AddValidationData(dataValidation);
|
|
|
|
// 删除选项sheet
|
|
workbook.RemoveSheetAt(workbook.GetSheetIndex(sheet2));
|
|
|
|
// 保存Excel文件
|
|
using (FileStream fs = new FileStream(savePath, FileMode.Create, FileAccess.Write))
|
|
{
|
|
workbook.Write(fs);
|
|
}
|
|
}
|
|
|
|
private void hyperlinkLabelControl2_Click(object sender, EventArgs e)
|
|
{
|
|
ShowLogs?.Invoke();
|
|
}
|
|
}
|
|
}
|