C#導出 Excel 時, 生成 CheckBox 控件


在使用 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 的屬性進行設置。

 

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM