iT邦幫忙

0

C# Excel 處理

因為之前的問題有點太長,讓大家搞錯我的方向,這次有給素材,直接用就可以了,我也想了很久,卡在很多地方,也有參考其他人的,還是失敗了。
先放素材
https://drive.google.com/file/d/1Dy6G4vYN3gdiOFMHqyGJcDkd1o-jI6cv/view?usp=sharing
然後我也稍微解釋一下。
https://ithelp.ithome.com.tw/upload/images/20210503/20136928hM3Tgkz9Ex.pnghttps://ithelp.ithome.com.tw/upload/images/20210503/20136928nm7v3wzgSy.pnghttps://ithelp.ithome.com.tw/upload/images/20210503/20136928nhG7FWiJJO.png
這是我拿到的檔案的範例(自己製作的範例),沒有值的都會是空格(並不是我故意空的)。所以只要是NULL傳到LIST都會出現錯誤。
第一張圖與第二張圖合併成第三張圖,需要甚麼的欄位我都有做標記了,第三張圖下方有做註解。
第二個表原檔是合併儲存格,素材都是完好的。

第一張與第二張都是不同的檔案(非worksheet),算是要拉需要的欄位出來,做成第三個Excel檔案。
只是是以第二張的黃色P/N為標準。
另外三個的標題都是不同。

共通點一樣是黃色。比較要注意的地方是紅色,他是兩張表的那個欄位做相加
剩下的只要黃色名稱重複,都直接合併相加。

可以的話,可以給我比較簡單的方法來做嗎?看了很多人的方式,我都不知道他們怎麼指定要哪個欄位,然後放到哪個欄位。
另一個問題是,NULL要怎麼解決
大部分回答的都叫我用下面這種方式(之前的程式碼,其中一個LIST)

  var dataOrigin = new List<DataOrigin>();               
        for(int r = 1; r <= totalRows; r++ )
        {
            dataOrigin.Add(new DataOrigin 
            { item = sh.Cells[r, 1].Value.ToString(), 
                Apr = sh.Cells[r, 2].Value.ToString(),
                May = sh.Cells[r, 3].Value.ToString(),
                Jun = sh.Cells[r, 4].Value.ToString()
            });
        }
        

可是這個只要遇到空格就會回傳NULL我就沒辦法使用,也找不出如何解決NULL。

我也有用過japhenchen大大的程式碼,可是改成我想要的就失敗了(給的問題沒有給得很清楚,想說自己改應該可以)。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
水無痕
iT邦新手 3 級 ‧ 2021-05-05 19:47:04
最佳解答

試一下 GetValue<T> 吧
就算碰到沒內容的 Cell 也不會有問題 !
也不需要特別處理 !

Github 範例

https://ithelp.ithome.com.tw/upload/images/20210505/20137005wAUzIOzSZb.png

0
小魚
iT邦大師 1 級 ‧ 2021-05-04 01:17:54
item = sh.Cells[r, 1].Value == NULL ? "" : sh.Cells[r, 1].Value.ToString().ToString()

這樣子呢?

看更多先前的回應...收起先前的回應...

如果等於NULL,可以回傳0嗎? 因為我已經改成

  for (int r = 3; r <= totalColums; r++)
            {
                list1.Add(new User
                {
                    project = sh1.Cells[r, 1].Value?.ToString(),
                    part = sh1.Cells[r, 2].Value?.ToString(),
                    im = sh1.Cells[r, 3].Value?.ToString(),
                    VM = sh1.Cells[r, 4].Value?.ToString()
                });
             }

可是我用 Group 要將它加起來,有NULL會出現錯誤
https://ithelp.ithome.com.tw/upload/images/20210504/20136928ENCe9PDzx7.png

改成您的變這樣
https://ithelp.ithome.com.tw/upload/images/20210504/20136928vn40zfe5fO.png

小魚 iT邦大師 1 級 ‧ 2021-05-04 12:41:01 檢舉

哪來那麼多ToString...
不過你的錯誤是錯在long.Parse,

要不然改成這樣看看

item = sh.Cells[r, 1].Value == NULL ? 0 : Int64.Parse(sh.Cells[r, 1].Value)

不過如果是文字應該也會出錯...

https://ithelp.ithome.com.tw/upload/images/20210504/20136928xrB1CTkagZ.png

小魚 iT邦大師 1 級 ‧ 2021-05-04 13:16:09 檢舉

那就是要先轉ToString(),
話說你要不要嘗試理解一下他的錯誤訊息...

我要發表回答

立即登入回答