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

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

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

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

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


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

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


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

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

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

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

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


、如何使用

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


1、需求說(shuō)明


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


2、程序界面


因?yàn)橥耆笈_(tái)運(yùn)行,所以界面比較簡(jiǎn)單。只有一個(gè)過(guò)程消息顯示和兩個(gè)操作按鈕。兩個(gè)按鈕分別用于打開(kāi)導(dǎo)出的文件夾和手動(dòng)強(qiáng)制導(dǎo)出。

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

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

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

if (bSave){

  if (StartLog)

  {

      if (DataBuff.Count>=32000)

      {

         labMsg.Text = "信息: " + "記錄數(shù)超限,請(qǐng)先導(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時(shí)或者點(diǎn)擊手動(dòng)導(dǎo)出按鈕時(shí)把數(shù)據(jù)保存到指定的文件夾下面。導(dǎo)出完成后清除list里面的數(shù)據(jù)。

//導(dǎo)出

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

{

    //手動(dòng)導(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";

         //寫(xiě)Excel

         var config = new OpenXmlConfiguration

         {

              DynamicColumns = new DynamicExcelColumn[] {

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

              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 = "信息: " + "無(wú)數(shù)據(jù),請(qǐng)先記錄數(shù)據(jù)!";

}

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


這個(gè)小項(xiàng)目中我們只用到了MiniExcel的寫(xiě)入和保存功能,其它的讀取、查詢(xún)功能沒(méi)有使用到,大家可以自行參考幫助。


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