欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】一款輕量級的Excel操作組件MiniExcel

admin
2023年10月16日 9:45 本文熱度 885
、概述

一直以來,C#操作Excel格式文檔常用的方式有Office互操作組件、NPOI、EPPLUS等,每種方式各有其優缺點。我們簡單匯總了一下,參見下表。


上表中,有商業的,也有免費的。就組件質量來說,商業的肯定要比開源免費的好。不差錢的用戶建議優先選擇商業組件庫。質量和服務都有保障。免費的組件庫中,NPOI目前應該可以算是占有率最高了。

除了上面幾種外,我們現在還有一款簡單、高效避免OOM的輕量級,名為MiniExcel的類庫可以選擇。


、MiniExcel特點
  1. 低內存耗用,避免OOM、頻繁 Full GC 情況;

  2. 支持即時操作每行數據;

  3. 兼具搭配 LINQ 延遲查詢特性,能辦到低消耗、快速分頁等復雜查詢;

  4. 輕量,不需要安裝 Microsoft OfficeCOM+DLL小于150KB

  5. 簡便操作的 API 風格;


、如何使用

MiniExcel使用比較方便,也有比較完善的文檔幫助(鏈接:https://gitee.com/dotnetchina/MiniExcel)。這里我們結合一個實際例子來簡單介紹如何使用。


1、需求說明


WinCC有兩個bool類型變量。分別表示Save和Export。其中Save為true時開始按照指定的時間間隔讀取數據,為false時停止讀取。當Export為true時將讀取的數據寫到一個excel文件中,然后導出到指定的文件夾下面。


2、程序界面


因為完全后臺運行,所以界面比較簡單。只有一個過程消息顯示和兩個操作按鈕。兩個按鈕分別用于打開導出的文件夾和手動強制導出。

代碼也不復雜。界面加載后啟動一個線程對WinCC的這兩個變量進行監視。當bSave為true時把數據保存到一個list中。當bSave為false時停止記錄。數據存儲的時間間隔我們簡單地用了一個計數器來實現。

//保存命令bool bSave = hmi.ReadTag("a1") == "1";

//導出命令bool bExport = hmi.ReadTag("a2") == "1";
//開始記錄

if (bSave){

  if (StartLog)

  {

      if (DataBuff.Count>=32000)

      {

         labMsg.Text = "信息: " + "記錄數超限,請先導出再記錄";

      }

      else

      {

          labMsg.Text = "信息: " + "正在記錄數據......";

          Models.DataModel dm = new Models.DataModel();

          dm.DT = DateTime.Now.ToString();

          dm.Data1 = hmi.ReadTag("PAR1");

          dm.Data2 = hmi.ReadTag("PAR2");

          dm.Data3 = hmi.ReadTag("PAR3");

          dm.Data4 = hmi.ReadTag("PAR4");

          dm.Data5 = hmi.ReadTag("PAR5");

          dm.Data6 = hmi.ReadTag("PAR6");

          dm.Data7 = hmi.ReadTag("PAR7");

          dm.Data8 = hmi.ReadTag("PAR8");

          DataBuff.Add(dm);

      }

  }
  StartLog = 
false;

  count++;

  if (count>=timespace)

  {

      StartLog = true;

      count = 0;

  }

}

Else

{

   if (DataBuff.Count>0 && !bSave)

   {

       labMsg.Text = "信息: " + "暫停記錄數據......";

   }

}

當bExport為true時或者點擊手動導出按鈕時把數據保存到指定的文件夾下面。導出完成后清除list里面的數據。

//導出

if (ExportPN.P(bExport) || ManualExport)

{

    //手動導出命令

    ManualExport = false;

    if (DataBuff.Count>0)

    {

        StartLog = true;

        count = 0;

        string MainPath = INIOperation.INIGetStringValue(CommData.ConfigPath, "Export""Path"string.Empty);

        //判斷路徑是否存在

        string Path = MainPath + DateTime.Now.ToString("yyyy-MM") + "/";

        if (Directory.Exists(Path))

        {

            //

        }

        else

        {

            DirectoryInfo directoryInfo = new DirectoryInfo(Path);

            labMsg.Text = "信息: " + "創建新文件夾......";

            directoryInfo.create();

        }
        
string FilePath = Path + DateTime.Now.ToString("yyyyMMddHHmmss")+".xlsx";

         //Excel

         var config = new OpenXmlConfiguration

         {

              DynamicColumns = new DynamicExcelColumn[] {

              new DynamicExcelColumn("DT"){Width=20,Name="日期時間"},

              new DynamicExcelColumn("Data1"){Width=15,Name=AliasList[0],Ignore=string.IsNullOrEmpty(AliasList[0])},

              new DynamicExcelColumn("Data2"){Width=15,Name=AliasList[1],Ignore=string.IsNullOrEmpty(AliasList[1])},

              new DynamicExcelColumn("Data3"){Width=15,Name=AliasList[2],Ignore=string.IsNullOrEmpty(AliasList[2])},

              new DynamicExcelColumn("Data4"){Width=15,Name=AliasList[3],Ignore=string.IsNullOrEmpty(AliasList[3])},

              new DynamicExcelColumn("Data5"){Width=15,Name=AliasList[4],Ignore=string.IsNullOrEmpty(AliasList[4])},

              new DynamicExcelColumn("Data6"){Width=15,Name=AliasList[5],Ignore=string.IsNullOrEmpty(AliasList[5])},

              new DynamicExcelColumn("Data7"){Width=15,Name=AliasList[6],Ignore=string.IsNullOrEmpty(AliasList[6])},

              new DynamicExcelColumn("Data8"){Width=15,Name=AliasList[7],Ignore=string.IsNullOrEmpty(AliasList[7])}

          }

      };
     
//導出Excel

      MiniExcelLibs.MiniExcel.SaveAs(FilePath, DataBuff, configuration: config);

      DataBuff.Clear();

      labMsg.Text = "信息: " + "導出文件成功!";

   }

   else

      labMsg.Text = "信息: " + "無數據,請先記錄數據!";

}

從上面的代碼可以看出,MiniExcel的使用還是比較簡單的。寥寥數行即可實現將數據保存到Excel中。導出的文件效果如下圖所示。


這個小項目中我們只用到了MiniExcel的寫入和保存功能,其它的讀取、查詢功能沒有使用到,大家可以自行參考幫助。


該文章在 2023/10/16 9:45:42 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved