ClosedXML C#简单导入导出功能WPF
引用包Install-Package ClosedXML
代码示例
public RelayCommand ExportExcelCmd => new RelayCommand(() =>
{
try
{
var saveFileDialog = new SaveFileDialog
{
Filter = "Excel files (*.xlsx)|*.xlsx",
DefaultExt = "xlsx",
FileName = "CCD参数列表导出_" + System.DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".xlsx"
};
if (saveFileDialog.ShowDialog() == true)
{
var filePath = saveFileDialog.FileName;
// ✅ 使用 ClosedXML 进行导出
using (var workbook = new ClosedXML.Excel.XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("参数列表");
// 表头
worksheet.Cell(1, 1).Value = "参数名";
worksheet.Cell(1, 2).Value = "地址";
worksheet.Cell(1, 3).Value = "当前配方值";
worksheet.Cell(1, 4).Value = "保存到配方的值";
var list = this._SavePLCParams;
if (list == null || !list.Any())
{
MessageBox.Show("数据列表为空,无法导出");
return;
}
// 填充数据(从第2行开始)
for (int i = 0; i < list.Count; i++)
{
var item = list[i];
worksheet.Cell(i + 2, 1).Value = item.Name;
worksheet.Cell(i + 2, 2).Value = item.Address;
worksheet.Cell(i + 2, 3).Value = item.AddressValue;
worksheet.Cell(i + 2, 4).Value = item.DefaultValue;
}
// 自动调整列宽
worksheet.Columns().AdjustToContents();
// 保存文件
workbook.SaveAs(filePath);
}
MessageBox.Show("导出成功!");
}
}
catch (System.Exception ex)
{
MessageBox.Show("导出失败:" + ex.Message);
}
});
public RelayCommand ImportExcelCmd => new RelayCommand(() =>
{
try
{
var openFileDialog = new OpenFileDialog
{
Filter = "Excel files (*.xlsx)|*.xlsx",
Multiselect = false
};
if (openFileDialog.ShowDialog() == true)
{
var filePath = openFileDialog.FileName;
using (var workbook = new ClosedXML.Excel.XLWorkbook(filePath))
{
var worksheet = workbook.Worksheet(1);
int rowCount = worksheet.RangeUsed().RowCount();
var importedData = new System.Collections.Generic.List<BaseAddressDto>();
for (int row = 2; row <= rowCount; row++)
{
var name = worksheet.Cell(row, 1).GetString();
var address = worksheet.Cell(row, 2).GetString();
var addressValue = worksheet.Cell(row, 3).GetString();
var defaultValue = worksheet.Cell(row, 4).GetString();
var item = new BaseAddressDto
{
Name = name ?? "",
Address = address ?? "",
AddressValue = addressValue ?? "",
DefaultValue = defaultValue ?? ""
};
importedData.Add(item);
}
this._SavePLCParams = new ObservableCollection<BaseAddressDto>(importedData);
}
MessageBox.Show("导入成功!");
}
}
catch (System.Exception ex)
{
MessageBox.Show("导入失败:" + ex.Message);
}
});

1806

被折叠的 条评论
为什么被折叠?



