最近, 我在用c#開發乙個excel add-in的時候,發現了一些害人不淺的坑,特來總結列舉如下:
這裡我讀寫excel引用的是using excel = microsoft.office.interop.excel;
問題一 如何判斷乙個單元格去除首尾空格後是不是空的
在獲取單元格內的文字內容進行判斷時,總覺得最好用text屬性,少用或不用value和value2屬性
if (cur_sht.range["a1"].text.trim() == "")
{}text屬性是唯讀,沒有任何引數,會讀取單元格的表面內容,表面內容是指當單元格的格式發生變化時,text屬性讀取到的內容也會發生變化
value屬性可讀可寫,有乙個可選引數(xlrangevaluedatatype),會讀取單元格的實際內容,實際內容是指給單元格賦值時是怎麼樣的內容,實際內容就一直保持不變,除非重新賦值
這個可選引數有三個值可選,第乙個值是預設的,其他兩個值沒試過,估計永遠也不會去用
xlrangevaluedefault=10:cur_sht.range["a1"].value[excel.xlrangevaluedatatype.xlrangevaluedefault]
xlrangevaluemspersistxml=12:cur_sht.range["a1"].value[excel.xlrangevaluedatatype.xlrangevaluemspersistxml]
xlrangevaluexmlspreadsheet=11:cur_sht.range["a1"].value[excel.xlrangevaluedatatype.xlrangevaluexmlspreadsheet]
value2屬性也是可讀可寫,跟value屬性一樣,但沒有引數
對於實際內容不為空的單元格,使用cur_sht.range["a1"].value.trim()或者cur_sht.range["a1"].value2.trim()是完全沒問題的,但如果是乙個完全為空的單元格,value和value2屬性就會返回乙個空物件,這時候後面再接trim()方法就會報錯了,要用value或value2屬性找出這種完全為空的單元格,可以這樣:
if (cur_sht.range["a1"].value is null)
{}但是這樣就不能把去除空格後的情況考慮進去了,而text屬性又有乙個弊端,因為它是讀取單元格的表面內容,所以有時候讀取到的內容用來判斷並不能反映真實的情況:
比如單元格儲存的是乙個長日期,但是單元格寬度不夠的話就會顯示成"##########",這時候text屬性獲取到的就是一串井號,這種情況可以在前面新增一句**:
cur_sht.columns.autofit();
總之,兩種方法皆有利有弊,視具體情況選擇吧。
問題二 給乙個單元格賦值為空有多少種方法
這三種方法效果都是一樣的,用cur_sht.range["a1"].value取值都會返回null。
cur_sht.range["a1"].value = null;
cur_sht.range["a1"].value = "";
cur_sht.range["a1"].value =string.empty;
問題三 如何利用陣列快速讀寫單元格區域內容
如果要向行向區域的單元格寫入東西,可以用一維陣列,比如:
int arr1 = new int[4] ;
cur_sht.range["a1:d1"].value = arr1;
如果要向列向區域的單元格寫入東西,可以用二維陣列,比如:
int[,] arr2 = new int[4, 1] ,,, };
//int[,] arr2 = new int[4, 1] ,,, };這個也可以
cur_sht.range["a1:a4"].value = arr2;
如果要向矩形區域的單元格寫入東西,更要用二維陣列,比如:
int[,] arr3 = new int[4, 2] , , , };
cur_sht.range["a1:b4"].value = arr3;
如果要從單元格區域讀出內容,放進陣列中,不管一二維,都可以這麼寫:
object[,] arr4 = (object[,])cur_sht.range["a1:b4"].value2;
messagebox.show(arr4.getvalue(1,1).tostring());//這裡輸出的是a1單元格,index從1開始
python Excel讀取 合併單元格讀取
python excel讀取 合併單元格讀取 後續會補充python excel寫入的部分 1.python讀取excel單元格 包含讀取excel中資料,以及出現橫向合併單元格,以及豎向合併單元格的內容。英文注釋標註了函式的功能,後又補充了部分中文注釋。合併單元格的函式通用,可以直接複製拿走,傳入...
掌控 GridView 讀取單元格資料值
按照 msdn的說法,gridview 控制項將其所有資料行都儲存在 rows 集合中。通過使用 rows的cells 屬性,可以訪問 gridviewrow 物件的單獨單元格。如果某個單元格包含其他控制項,則通過使用單元格的 controls 集合,可以從單元格檢索控制項。如果控制項指定了 id,...
單元格資料驗證
gridview中 的 cellvaluechanging 和 cellvaluechanged 事件搭配使用。cellvaluechanging 發生在事件改變之前,所以可以使用 它儲存之前的值 value1。cellvaluechanging 發生在事件改變之後,所以可以使用它進行驗證 改變後的...