闽公网安备 35020302035485号



public class WaterData
{
public int Id { get; set; }
public string? Name { get; set; }
public string? WaterLevel { get; set; }
public string? WaterChange { get; set; }
public string? Source { get; set; }
}
点击导入Excel数据按钮的代码如下:OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel Files (*.xlsx; *.xls;*.csv)|*.xlsx; *.xls;*.csv";
openFileDialog.FilterIndex = 1;
openFileDialog.Multiselect = false;
// 堆代码 duidaima.com
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
filePath = openFileDialog.FileName;
ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
using (ExcelPackage package = new ExcelPackage(filePath))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
//获取表格的列数和行数
int rowCount = worksheet.Dimension.Rows;
int colCount = worksheet.Dimension.Columns;
for (int i = 0; i < rowCount - 1; i++)
{
//创建一个realData类保存数据
var data = new WaterData();
data.Id = n;
data.Name = (string)worksheet.Cells[i + 2, 3].Value;
data.WaterLevel = Convert.ToString(worksheet.Cells[i + 2, 4].Value);
data.WaterChange = Convert.ToString(worksheet.Cells[i + 2, 5].Value);
data.Source = (string)worksheet.Cells[i + 2, 2].Value;
waterList.Add(data);
n++;
}
package.Save();
}
}
else
{
MessageBox.Show("您本次没有选择任何文件!!!");
}
}
上面的n是static int,初始值为0。
private void button2_Click(object sender, EventArgs e)
{
distinctList = waterList.DistinctBy(x => new { x.Name, x.Source }).ToList();
}
只需要一行代码:distinctList = waterList.DistinctBy(x => new { x.Name, x.Source }).ToList();
执行去重的效果如下所示:
var Names = distinctList.Select(x => x.Name).Distinct().ToList();实现效果如下:

for (int i = 0; i < Names.Count; i++)
{
var nameList = distinctList.Where(x => x.Name == Names[i]).ToList();
if (nameList.Count > 50)
{
list.Add(nameList);
}
}
实现数据分类也只需要一行代码:var nameList = distinctList.Where(x => x.Name == Names[i]).ToList();实现效果如下所示:

private void button4_Click(object sender, EventArgs e)
{
// 创建一个FolderBrowserDialog对象
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
// 设置对话框的标题
folderBrowserDialog.Description = "选择保存各站点数据的文件夹";
// 设置默认的根文件夹,如果需要的话
// folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyComputer;
// 显示文件夹选择对话框
DialogResult result = folderBrowserDialog.ShowDialog();
if (result == DialogResult.OK)
{
// 用户选择了一个文件夹
selectedFolderPath = folderBrowserDialog.SelectedPath;
richTextBox1.Text += $"选择的Excel保存文件夹为:{selectedFolderPath}\r\n";
richTextBox1.Text += "正在执行导出为Excel文件...";
using (ExcelPackage excelPackage = new ExcelPackage())
{
for(int i =0; i < list.Count; i++)
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add(list[i][0].Name);
for (int j = 0; j < list[i].Count; j++)
{
worksheet.Cells[j + 1, 1].Value = list[i][j].Id;
worksheet.Cells[j + 1, 2].Value = list[i][j].Name;
worksheet.Cells[j + 1, 3].Value = list[i][j].WaterLevel;
worksheet.Cells[j + 1, 4].Value = list[i][j].WaterChange;
worksheet.Cells[j + 1, 5].Value = list[i][j].Source;
}
}
// 保存 Excel 文件
FileInfo excelFile = new FileInfo($"{selectedFolderPath}\\各站点数据.xlsx");
excelPackage.SaveAs(excelFile);
richTextBox1.Text += "导出为Excel文件完成\r\n";
}
}
}
实现效果如下所示:
using OfficeOpenXml;
using System.Collections;
using System.Collections.Generic;
namespace Excel数据处理
{
public partial class Form1 : Form
{
string filePath;
string selectedFolderPath;
static int n = 0;
List<WaterData> waterList = new List<WaterData>();
List<WaterData> distinctList = new List<WaterData>();
List<List<WaterData>> list = new List<List<WaterData>>();
public class WaterData
{
public int Id { get; set; }
public string? Name { get; set; }
public string? WaterLevel { get; set; }
public string? WaterChange { get; set; }
public string? Source { get; set; }
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel Files (*.xlsx; *.xls;*.csv)|*.xlsx; *.xls;*.csv";
openFileDialog.FilterIndex = 1;
openFileDialog.Multiselect = false;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
filePath = openFileDialog.FileName;
richTextBox1.Text += $"您选中的文件路径为:{filePath}\r\n";
richTextBox1.Text += $"正在导入Excel数据...\r\n";
ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
using (ExcelPackage package = new ExcelPackage(filePath))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
//获取表格的列数和行数
int rowCount = worksheet.Dimension.Rows;
int colCount = worksheet.Dimension.Columns;
for (int i = 0; i < rowCount - 1; i++)
{
//创建一个realData类保存数据
var data = new WaterData();
data.Id = n;
data.Name = (string)worksheet.Cells[i + 2, 3].Value;
data.WaterLevel = Convert.ToString(worksheet.Cells[i + 2, 4].Value);
data.WaterChange = Convert.ToString(worksheet.Cells[i + 2, 5].Value);
data.Source = (string)worksheet.Cells[i + 2, 2].Value;
waterList.Add(data);
n++;
}
richTextBox1.Text += $"导入Excel数据成功,数据量为:{rowCount - 1}\r\n";
package.Save();
}
}
else
{
MessageBox.Show("您本次没有选择任何文件!!!");
}
}
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Text += "正在执行数据去重...\r\n";
distinctList = waterList.DistinctBy(x => new { x.Name, x.Source }).ToList();
richTextBox1.Text += $"数据去重已完成,去重后数据量为:{distinctList.Count}\r\n";
}
private void button3_Click(object sender, EventArgs e)
{
richTextBox1.Text += "正在执行数据分类...\r\n";
var Names = distinctList.Select(x => x.Name).Distinct().ToList();
for (int i = 0; i < Names.Count; i++)
{
var nameList = distinctList.Where(x => x.Name == Names[i]).ToList();
if (nameList.Count > 50)
{
list.Add(nameList);
}
}
richTextBox1.Text += $"执行数据分类完成,类数为:{list.Count}\r\n";
}
private void button4_Click(object sender, EventArgs e)
{
// 创建一个FolderBrowserDialog对象
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
// 堆代码 duidaima.com
// 设置对话框的标题
folderBrowserDialog.Description = "选择保存各站点数据的文件夹";
// 设置默认的根文件夹,如果需要的话
// folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyComputer;
// 显示文件夹选择对话框
DialogResult result = folderBrowserDialog.ShowDialog();
if (result == DialogResult.OK)
{
// 用户选择了一个文件夹
selectedFolderPath = folderBrowserDialog.SelectedPath;
richTextBox1.Text += $"选择的Excel保存文件夹为:{selectedFolderPath}\r\n";
richTextBox1.Text += "正在执行导出为Excel文件...";
using (ExcelPackage excelPackage = new ExcelPackage())
{
for(int i =0; i < list.Count; i++)
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add(list[i][0].Name);
for (int j = 0; j < list[i].Count; j++)
{
worksheet.Cells[j + 1, 1].Value = list[i][j].Id;
worksheet.Cells[j + 1, 2].Value = list[i][j].Name;
worksheet.Cells[j + 1, 3].Value = list[i][j].WaterLevel;
worksheet.Cells[j + 1, 4].Value = list[i][j].WaterChange;
worksheet.Cells[j + 1, 5].Value = list[i][j].Source;
}
}
// 保存 Excel 文件
FileInfo excelFile = new FileInfo($"{selectedFolderPath}\\各站点数据.xlsx");
excelPackage.SaveAs(excelFile);
richTextBox1.Text += "导出为Excel文件完成\r\n";
}
}
}
}
}