<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用C#將幾個Excel文件合并去重分類

      需要將幾個Excel表格里面的數據去重,然后將每個站點的數據另存為一張Sheet上。

      幾個表格如下所示:

       

       

      實現效果如下所示:

       

      具體實現

      需要使用EPPlus操作Excel

      安裝EPPlus如下所示:

       

      為了更好的演示與說明,把步驟進行了拆分,先導入Excel數據,再去重,再進行數據分類,最后再導出為Excel數據,設計了一個窗體,如下所示:

       

      導入Excel數據

      首先定義一個類,用來保存相關數據,類的設計如下:

       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;
      ?
         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。

      導入Excel數據的效果如下所示:

      數據去重

      執行數據去重,依據的是C#LINQ中的DistinctBy方法,本例中不使用id是因為每條數據id都不一樣,即使是重復的數據但是id也不一樣,本例依據的中Name屬性和Soure屬性,只要這兩個數據一樣,就認為是重復數據。

      點擊數據去重按鈕的代碼如下:

      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();

      執行去重的效果如下所示:

      執行數據分類

      本例中要求將同一個站點的數據放在同一張Sheet上,那么首先需要知道到底有多少個不同的站名,代碼如下:

       var Names = distinctList.Select(x => x.Name).Distinct().ToList(); 

      實現效果如下:

      由于這些數據是由圖片文字識別而來的,因此可能識別有誤,如果一個站名的數據不足50條,就不需要,代碼如下:

       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();

      實現效果如下所示:

      導出為Excel文件

      本例中導出為Excel文件的思路是先讓用戶選定一個文件夾,然后就將導出的Excel文件保存在這個文件夾下面,導出為Excel文件的代碼如下:

       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";
                      }
                  }
              }

      實現效果如下所示:

       

      最后

      操作Excel大家一般使用VBA、Python比較多,本文通過一個實例演示了如何通過C#來簡化我們的辦公(處理Excel數據)。

      本實例全部源代碼如下:

      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();
      ?
                  // 設置對話框的標題
                  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";
                      }
                  }
              }
          }
      }

      如果你也對C#感興趣,歡迎關注微信公眾號DotNet學習交流~
      posted @ 2023-11-15 10:32  mingupupup  閱讀(1950)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 亚洲最大的成人网站| 偷拍美女厕所尿尿嘘嘘小便| 日韩高清国产中文字幕| 亚洲国产成人久久综合三区| 又色又爽又黄18禁美女裸身无遮挡| 久久91精品牛牛| 成人福利国产午夜AV免费不卡在线| 国产成人午夜精品福利| 极品少妇的粉嫩小泬视频| 国产精品白浆在线观看免费| 熟女一区| 成人看的污污超级黄网站免费 | 国产高潮又爽又刺激的视频| 常州市| 正在播放肥臀熟妇在线视频| 色综合视频一区二区三区| 中文字幕在线精品国产| 五月天丁香婷婷亚洲欧洲国产| 少妇熟女久久综合网色欲| 日韩有码中文字幕一区二区 | 亚洲午夜香蕉久久精品| 插入中文字幕在线一区二区三区| 国产成人人综合亚洲欧美丁香花| 99久久精品久久久久久婷婷| 94人妻少妇偷人精品| 人人做人人妻人人精| 亚洲综合国产成人丁香五| 东京热大乱系列无码| 国产在线无码精品无码| 国产漂亮白嫩美女在线观看| XXXXXHD亚洲日本HD| 色综合久久中文综合网| 亚洲国产日韩a在线播放| 久久国产成人高清精品亚洲| 午夜色无码大片在线观看免费| 兴和县| 国产亚洲综合区成人国产| 高清自拍亚洲精品二区| 国产欧美另类精品久久久 | 国产精品久久人妻无码网站一区 | 丁香五月亚洲综合深深爱 |