Re: [問題] List<T>相關問題

作者: doom0819 (哉一)   2014-05-27 11:17:20
※ 引述《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();
}
作者: Litfal (Litfal)   2014-05-27 19:53:00
你只判斷每列的第一格?(i == 0)?
作者: doom0819 (哉一)   2014-05-27 21:31:00
沒有,有讀很多格,但怕占篇幅所以刪減,讀到i==7
作者: ssccg (23)   2014-05-28 11:28:00
首先strcell已經保證有值了不是嗎? cell本身有沒有資料有差?再來List.add可以加null值,跟有沒有資料沒關係你是從哪邊得到List.add沒有新增資料的最後"宣告"這個字不是這樣用的...
作者: doom0819 (哉一)   2014-05-29 00:03:00
我在if裡面用msgbox印計數器的值發現的。我太菜了,可能用錯講法,sorry><
作者: ssccg (23)   2014-05-29 11:01:00
計數器? List.Count? 同時array和list兩個都放,比較一下?

Links booklink

Contact Us: admin [ a t ] ucptt.com