作者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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1401160643.A.76C.html
1F:→ Litfal:你只判断每列的第一格?(i == 0)? 05/27 19:53
2F:→ doom0819:没有,有读很多格,但怕占篇幅所以删减,读到i==7 05/27 21:31
3F:→ ssccg:首先strcell已经保证有值了不是吗? cell本身有没有资料有差? 05/28 11:28
4F:→ ssccg:再来List.add可以加null值,跟有没有资料没关系 05/28 11:29
5F:→ ssccg:你是从哪边得到List.add没有新增资料的 05/28 11:40
6F:→ ssccg:最後"宣告"这个字不是这样用的... 05/28 11:44
7F:→ doom0819:我在if里面用msgbox印计数器的值发现的。我太菜了,可能 05/29 00:03
8F:→ doom0819:用错讲法,sorry>< 05/29 00:03
9F:→ ssccg:计数器? List.Count? 同时array和list两个都放,比较一下? 05/29 11:01