在使用 Microsoft.Office.Interop.Excel 組件導出Excel 表格時,要把導出前的 CheckBox 控件一同導出到 excel 表格中,對於這個功能 看似很簡單,但 Microsoft.Office.Interop.Excel 在生成 CheckBox 時,遇到了很大的問題,就是不能生成 CheckBox, 網上找了些資料,但這方面仍是不多,有的解決方案中使用 Spire.XLS 這個組件 ,會很容易導出一個 CheckBox, 但這個組件不是免費的,有的建議使用 NPOI 這個免費開源的組件,那麼問題來了,全部的導出excel 的代碼就要重寫,這顯然增長了難度和工做量,在不改變組件的狀況下,怎麼才能把 CheckBox 控件導出到excel 表格中, 在研究了 Microsoft.Office.Interop.Excel 的相關接口中,終於發現能夠這樣導出,具體 代碼以下 :字體
Range r003 = sheet.get_Range(sheet.Cells[beginRowIndex, 4],sheet.Cells[beginRowIndex, 5]); r003.MergeCells = true; double r3_left = (double)r003.Left; double r3_top = (double)r003.Top; Shape checkBoxShape1 = sheet.Shapes.AddFormControl(XlFormControl.xlCheckBox, (int)r3_left + 40, (int)r3_top, 50, 15); Shape checkBoxShape2 = sheet.Shapes.AddFormControl(XlFormControl.xlCheckBox, ((int)r3_left) + 110, (int)r3_top, 50, 15); Microsoft.Office.Interop.Excel.CheckBox ckb1 = sheet.CheckBoxes(checkBoxShape1.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox; ckb1.Text = "關閉"; // checkBox 顯示的文本 ckb1.Value = 0; // 0: 末選中, 1:選 中 ckb1.Enabled = false; // false: 不可編輯, true: 可編輯 Microsoft.Office.Interop.Excel.CheckBox ckb2 = sheet.CheckBoxes(checkBoxShape2.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox; ckb2.Text = "未關閉"; ckb2.Value = 0; ckb2.Enabled = false;
首先要 調用 Shapes.AddFormControl 的方法,先向Shapes 集合中添加一個 CheckBox 控件,才能調用 ,否則 Shapes 集合是空的,沒有控件。AddFormControl 方法有三個參數:spa
第一個參數: 表示控件的類型,是個枚舉類型,能夠是button , listbox, pictureBox, textBox, label 等, winform 中經常使用 的控件 excel
第二個參數: 表示 添加的控件的位置,X軸座標,即當前單元格的左邊距(left)屬性,int 類型code
第三個參數: 表示 添加的控的位置, Y 軸座標,即當前單元格的 頂部邊距(top) 屬性,int 類型orm
第四個參數: 控件的寬度, int 類型blog
第五個參數: 控件的高度, int 類型接口
特別提示: 第四個參數和第五個參數,不管怎麼改變,控件 的文字大小是不會變的, 要想改變控件顯示的字體大小,要使用 checkBoxShape1.TextEffect.FontSize 這個屬性來設置, 但在運行時,不管值 怎麼設置,都會拋出一個異常: TextEffect 引起了異常, 設置的值超出了範圍, 對於這個,至今沒有找到解決的辦法 , 若是哪位大俠知道緣由或怎麼解決,望多多領教。get
shapes 添加 好後,就能夠用 sheet.CheckBoxes(checkBoxShape2.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox; 這行代碼來獲取建立的 checkBox, 而後對 checkBox 的屬性進行設置。it