狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

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


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

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


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

  2. 支持即時操作每行數(shù)據(jù);

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

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

  5. 簡便操作的 API 風(fēng)格;


、如何使用

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


1、需求說明


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


2、程序界面


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

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

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

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

if (bSave){

  if (StartLog)

  {

      if (DataBuff.Count>=32000)

      {

         labMsg.Text = "信息: " + "記錄數(shù)超限,請先導(dǎo)出再記錄";

      }

      else

      {

          labMsg.Text = "信息: " + "正在記錄數(shù)據(jù)......";

          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 = "信息: " + "暫停記錄數(shù)據(jù)......";

   }

}

當(dāng)bExport為true時或者點擊手動導(dǎo)出按鈕時把數(shù)據(jù)保存到指定的文件夾下面。導(dǎo)出完成后清除list里面的數(shù)據(jù)。

//導(dǎo)出

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

{

    //手動導(dǎo)出命令

    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 = "信息: " + "創(chuàng)建新文件夾......";

            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])}

          }

      };
     
//導(dǎo)出Excel

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

      DataBuff.Clear();

      labMsg.Text = "信息: " + "導(dǎo)出文件成功!";

   }

   else

      labMsg.Text = "信息: " + "無數(shù)據(jù),請先記錄數(shù)據(jù)!";

}

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


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


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