135 lines
3.8 KiB
C#
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
|
|
}
|
|
}
|