C# Excel導入數據


 

 

表的創建腳本

CREATE TABLE [dbo].[TB_PROJECTS_New1](
    [PROID] [decimal](10, 0) NOT NULL,
    [PROJECTNAME] [nvarchar](500) NULL,
    [PROJECTCODE] [nvarchar](100) NULL,
    [PARENTID] [decimal](10, 0) NULL,
    [NEXTID] [decimal](10, 0) NULL,
    [PROJECTORDER] [decimal](10, 0) NULL,
    [ISENABLED] [decimal](10, 0) NULL,
    [OWNERID] [decimal](10, 0) NULL,
    [CONSTRUCTIONID] [decimal](10, 0) NULL,
    [SUPERVISIONID] [decimal](10, 0) NULL,
    [CONTRACTID] [decimal](10, 0) NULL,
    [LEVEL] [decimal](10, 0) NULL,
    [QUANTITY] [decimal](10, 0) NULL,
    [VERSIONING] [nvarchar](max) NULL,
    [MILEAGENO] [nvarchar](100) NULL,
    [COMPONENTCODE] [varchar](255) NULL,
    [NCOMPONENTCODE] [varchar](255) NULL,
    [TASKSTATUS] [decimal](10, 0) NULL,
    [FBXID] [nvarchar](50) NULL,
    [ISSUBUNIT] [decimal](10, 0) NULL,
    [BIDSION] [varchar](10) NULL,
    [ProjectType] [nvarchar](max) NULL,
    [EquCode] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 

Excel的格式

 

導入后的樣子

 

數據庫的樣子:

 

 

導入需求:

  節點從左到右,依次導入,樹的層級遞增。

  不導入為空的單元格。

  導入的列 從第一列 到 構件名稱(包含構件名稱)那列,其它列,不作為節點導入到數據庫。

  構件編碼 作為 節點的屬性導入。構件編碼 做為 構件名稱那個節點(或者是構件編碼左邊的節點,有可能構件名稱為空) 的屬性 導入。

    每個節點 都有一個屬性,屬性存Excel的列名

  砼等級這列(包含砼等級這列),及右邊的所有列,不在導入數據的范圍內,跟導入數據沒有關系。

  Excel的列名有時候會不對,或者很亂,但是構件編碼這列有,構件名稱可能會沒有,分部工程可能沒有,或者多了幾個分部工程(Excel列名肯定不會重復)

 

Excel需要做一些校驗,避免數據源錯誤

  01、隱藏行、隱藏列、
  02、行高不足(可配置)
  03、列名強制校驗(必須包含指定列)
  04、單元格為公式(配置項為不支持公式的情況)
  05、構件編碼為空
  06、構件編碼包含中文
  07、構件編碼重復
  08、構件編碼過少(可配置)
  09、同行構件名稱重復
  10、構件名稱重復

 

導入思路:

  把Excel轉換為文本,

  導入數據的時候,使用格式1的文本,

  導入屬性 列名的時候,使用格式2的文本。

 

 

格式1

 

格式2

 

 

程序的配置參數截圖:

 

 

 

 

 項目的結構:

 

 

 

 導入時有一些算法的判斷,加快了導入的速度,也做了一些該有的緩存。

對性能影響比較大的一個算法:

  比如,導入‘右幅A0-1#樁基砼澆築’節點的時候,不需要再對‘任河特大橋 右幅 下部結構 A0#橋台’ 這幾個節點進行判斷了,直接記錄與上一行不同的地方,用共用的parentId。

 

 

優化思路:

  一開始是沒有注意性能的,數據一多,那個導入速度慢死,但是數據的正確性確實也是保證了的,后來就監控各個方法的執行效率,看哪些方法執行的次數多,占用的時間多,相應的優化該方法。

  現在導入的數據可能有個10萬+吧 

 

 

導入測試1:

 

 

 

導入的Excel:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM