作者doom0819 (哉一)
看板C_Sharp
標題Re: [問題] List<T>相關問題
時間Tue May 27 11:17:20 2014
※ 引述《doom0819 (哉一)》之銘言:
: 1: List<T>是否可以像陣列用ref傳進method,或是有其他方法可以傳整個List<T>進去?
: 2:我用NPOI讀取Excel檔時,若是遇到空的Cell時,如果加上strcell=hr.GetCell(i)==null?"0":hr.GetCell(i).ToString();就可以克服NPOI將該格視為null的情況,但若用List的.Add方法來宣告大小並讀取時,就會遇到讀不到空的格子的問題,所以也不會新增大小吧。
: 我有查過MSDN了,但我目前好像沒有辦法解決,煩請版上高人解惑。麻煩了,感恩。
要貼程式碼,所以用回文的方式,請見諒
我原本用陣列來存放Excel讀進來的Cells,但後來考慮避免預先宣告陣列大小而導致超用,所以改用List<T>來存放。
在NPOI的方法裡面,如果是用陣列來存,如果加上「strcell = hr.GetCell(i) == null ? "0" : hr.GetCell(i).ToString();」這行,就可避免原本Cells沒有輸入資料被辨別為null的情況,但如果改用List<T>的.add方法來改變陣列大小的時候,就會因為Cells裡面沒有資料,而不會新增,不知道這樣的問題有沒有可以解決的辦法,麻煩指教了。感恩!
----------------
原本的可以work的程式碼如下,如果把ARRAY[j]=strcell這一行改寫成ARRAY.add(strcell);,就會受到Cell本身有沒有存資料影響,如果沒有存資料,就不會宣告。
string strFilePath = string.Format("C:\\Users\\apple\\Dropbox\\gdbus_data\\work_hour.xlsx");
XSSFWorkbook wk;
FileStream fs = new FileStream(strFilePath, FileMode.Open, FileAccess.ReadWrite);
wk = new XSSFWorkbook(fs);
XSSFSheet hst;
XSSFRow hr;
string strcell;
for (int k = 0; k < 1; k++) //共有1個sheet
{
hst = (XSSFSheet)wk.GetSheetAt(k);
string strSheetname = hst.SheetName; //Get Sheet Name
for (int j = 1; j <= hst.LastRowNum; j++) //row
{
hr = (XSSFRow)hst.GetRow(j);
for (int i = 0; i < hr.LastCellNum; i++) //column
{
//避免資料格空掉
strcell = hr.GetCell(i) == null ? "0" : hr.GetCell(i).ToString();
if (i == 0)
{
ARRAY[j] = strcell;
}
}
row_count = j;
}
fs.Close();
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.77.9.28
※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1401160643.A.76C.html
→ Litfal:你只判斷每列的第一格?(i == 0)? 05/27 19:53
→ doom0819:沒有,有讀很多格,但怕占篇幅所以刪減,讀到i==7 05/27 21:31
→ ssccg:首先strcell已經保證有值了不是嗎? cell本身有沒有資料有差? 05/28 11:28
→ ssccg:再來List.add可以加null值,跟有沒有資料沒關係 05/28 11:29
→ ssccg:你是從哪邊得到List.add沒有新增資料的 05/28 11:40
→ ssccg:最後"宣告"這個字不是這樣用的... 05/28 11:44
→ doom0819:我在if裡面用msgbox印計數器的值發現的。我太菜了,可能 05/29 00:03
→ doom0819:用錯講法,sorry>< 05/29 00:03
→ ssccg:計數器? List.Count? 同時array和list兩個都放,比較一下? 05/29 11:01