作者azzc1031 (azzc1031)
看板C_Sharp
標題[問題] 如何讀這種格式的Excel進去SQL server
時間Fri Jul 31 16:00:44 2020
小弟數據分析師一枚
工作上常需要把散落各地的Excel讀進SQL server
不過這次的格式實在太魔幻了,實在很頭痛
如下:
https://i.imgur.com/Rk3ly4V.jpg
每顆主料號底下都有數量不一的子料號
一個Excel檔的主料號有上千個
我要讀的Excel檔約有十來個
我的目標要存成這樣:
https://i.imgur.com/WHtZKu8.jpg
目前我是寫雙for迴圈
外迴圈讀a,b欄,內迴圈讀b,c欄。
若外迴圈遇到A欄的string非”主料號”時,則continue。
進來內迴圈後
內迴圈初始值為Find.(“子料號”).row +1
只要遇到b欄為null值則break。
但我這樣寫會變成這三顆主料號都會帶到
皮卡丘、傑尼龜、小火龍、妙蛙種子 這四顆子料號
因為系統默認 Find.(“子料號”).row 是第四列
所以內迴圈實際上只在row5~row8跑
是不是不用寫那麼複雜的雙for迴圈?
有高手可以救救我嗎QQ 感謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.215.145.175 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1596182446.A.85D.html
1F:→ james732: 不太懂你遇到的困難點是什麼?看起來不至於無法處理07/31 16:05
2F:→ awwseed: 看起來先用空白行當切割條件切出每個主料號07/31 16:14
3F:→ awwseed: 切完出來的資料就有規律可以去拆解成兩塊了吧07/31 16:15
4F:→ awwseed: 發現該 ROW A欄 = 主料號,就取B欄值為主料號07/31 16:17
5F:→ awwseed: 再往下找 A欄 = 子料號描述 的 ROW + 1一直爬到結束07/31 16:18
6F:→ awwseed: 逐行讀 ROW 去處理應該也沒啥問題,主料號之間都有空白行07/31 16:21
7F:→ testPtt: 資料庫正規化研究一下 不過我會直接用xml欄位07/31 16:23
8F:→ azzc1031: /*我是原po*/ ,目前我是寫雙迴圈,外迴圈讀a,b欄,內迴07/31 17:28
9F:→ azzc1031: 圈讀b,c欄。if外迴圈遇到A欄的string非”主料號”時,則07/31 17:28
10F:→ azzc1031: continue。進來內迴圈後,內迴圈初始值為”子料號”+1 r07/31 17:28
11F:→ azzc1031: ow,只要遇到b欄為null值則break。但我這樣寫會變成這三07/31 17:28
12F:→ azzc1031: 顆主料號都會帶到皮卡丘、傑尼龜、小火龍、妙蛙種子。是07/31 17:28
13F:→ azzc1031: 不是不用寫那麼複雜的雙迴圈?07/31 17:28
14F:推 Nilife: 雙層while loop,07/31 17:30
15F:→ Nilife: 第一層切出每筆料號,第二層處理各筆料號內容07/31 17:30
16F:→ Nilife: 這樣設計以後你每筆內容增加也比較好改07/31 17:30
※ 編輯: azzc1031 (49.215.145.175 臺灣), 07/31/2020 17:58:18
※ 編輯: azzc1031 (49.215.145.175 臺灣), 07/31/2020 18:11:25
※ 編輯: azzc1031 (49.215.145.175 臺灣), 07/31/2020 18:12:43
※ 編輯: azzc1031 (49.215.145.175 臺灣), 07/31/2020 18:20:19
18F:→ awwseed: 大概這樣吧,不過 Skip 跟 Split 目前寫死,視情況改囉 07/31 18:50
19F:→ azzc1031: 嗚嗚樓上太用心了,請受小弟一拜QQ 感謝! 07/31 19:08
21F:→ awwseed: 我有安裝 LinqToExcel 套件就是 07/31 19:19