ExcelHelper/Views/ViewModels/ImportViewModel.cs

135 lines
3.8 KiB
C#

using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Messaging;
using ExcelHelper.Message;
using MiniExcelLibs;
namespace ExcelHelper.Views.ViewModels
{
public partial class ImportViewModel : ObservableRecipient, IViewModel
{
public void FileDrop(string[] files)
{
ExcelFiles.Clear();
foreach (var item in files)
{
ExcelFiles.Add(item);
}
//ReadForExcel(ExcelFiles.First());
CurrentFilePath = ExcelFiles.First();
}
public void ReadForExcel(string path)
{
ExcelData = MiniExcel.Query(path, useHeaderRow: UseHeaderRow);
var columns = MiniExcel.GetColumns(path, useHeaderRow: UseHeaderRow);
GenColumns(columns);
}
private void GenColumns(IEnumerable<string> columns)
{
Columns.Clear();
if (UseHeaderRow)
{
foreach (var columnName in columns)
{
var column = new DataGridTextColumn
{
Header = columnName,
Binding = new System.Windows.Data.Binding($"{columnName}"),
Width = DataGridLength.Auto
};
Columns.Add(column);
}
}
else
{
for (var i = 'A'; i < 'Z'; i++)
{
var column = new DataGridTextColumn
{
Header = $"{i}",
Binding = new System.Windows.Data.Binding($"{i}"),
Width = DataGridLength.Auto
};
Columns.Add(column);
}
}
if (Columns.Count > 0)
WeakReferenceMessenger.Default.Send(new UpdateDataGridColumnsMessage([.. Columns]));
else
{
WeakReferenceMessenger.Default.Send(new ErrorDialogMessage("未读取到列信息!"));
}
}
#region Props
[ObservableProperty]
private IEnumerable<dynamic> _excelData;
[ObservableProperty]
private ObservableCollection<string> _excelFiles = [];
[ObservableProperty]
private ObservableCollection<DataGridColumn> _columns = [];
/// <summary>
/// 使用首行作为表头
/// </summary>
[ObservableProperty]
private bool _useHeaderRow;
/// <summary>
/// 选中的Sheet
/// </summary>
[ObservableProperty]
private string _selectedSheetName;
/// <summary>
/// Sheets列表
/// </summary>
[ObservableProperty]
private ObservableCollection<string> _sheets = [];
/// <summary>
/// 起始位置
/// </summary>
[ObservableProperty]
private string _startCell;
/// <summary>
/// 结束位置
/// </summary>
[ObservableProperty]
private string _endCell;
/// <summary>
/// 最大行数
/// </summary>
[ObservableProperty]
private string _maxRow;
/// <summary>
/// 当前文件路径
/// </summary>
private string _currentFilePath;
public string CurrentFilePath
{
get => _currentFilePath;
set
{
SetProperty(ref _currentFilePath, value);
ReadForExcel(value);
}
}
/// <summary>
/// Excel文件密码
/// </summary>
[ObservableProperty]
private string _excelPassword;
#endregion
}
}