※ 引述《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();
}