亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

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

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

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

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


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

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


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

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

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

  4. 輕量,不需要安裝 Microsoft Office、COM+DLL小于150KB;

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


、如何使用

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


1、需求說明


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


2、程序界面


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

代碼也不復(fù)雜。界面加載后啟動一個(gè)線程對WinCC的這兩個(gè)變量進(jìn)行監(jiān)視。當(dāng)bSave為true時(shí)把數(shù)據(jù)保存到一個(gè)list中。當(dāng)bSave為false時(shí)停止記錄。數(shù)據(jù)存儲的時(shí)間間隔我們簡單地用了一個(gè)計(jì)數(shù)器來實(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時(shí)或者點(diǎn)擊手動導(dǎo)出按鈕時(shí)把數(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="日期時(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 = "信息: " + "無數(shù)據(jù),請先記錄數(shù)據(jù)!";

}

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


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


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