在使用 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 方法有三個參數:
第一個參數: 表示控件的類型,是個枚舉類型,可以是button , listbox, pictureBox, textBox, label 等, winform 中常用 的控件
第二個參數: 表示 添加的控件的位置,X軸坐標,即當前單元格的左邊距(left)屬性,int 類型
第三個參數: 表示 添加的控的位置, Y 軸坐標,即當前單元格的 頂部邊距(top) 屬性,int 類型
第四個參數: 控件的寬度, int 類型
第五個參數: 控件的高度, int 類型
特別提示: 第四個參數和第五個參數,無論怎么改變,控件 的文字大小是不會變的, 要想改變控件顯示的字體大小,要使用 checkBoxShape1.TextEffect.FontSize 這個屬性來設置, 但在運行時,無論值 怎么設置,都會拋出一個異常: TextEffect 引發了異常, 設置的值超出了范圍, 對於這個,至今沒有找到解決的辦法 , 如果哪位大俠知道原因或怎么解決,望多多領教。
shapes 添加 好后,就可以用 sheet.CheckBoxes(checkBoxShape2.ZOrderPosition) as Microsoft.Office.Interop.Excel.CheckBox; 這行代碼來獲取創建的 checkBox, 然后對 checkBox 的屬性進行設置。