C# 对了 Excel数据有效性的设置(Excel的下拉)
///对单个Cell设置数据有效性 参数 _Worksheet , 有效数据源, 列号 public static void AddData(_Worksheet _wsh, string dataSource,int colIndex) { Range rng = (Range)_wsh.Columns.get_Item(colIndex, Type.Missing); try { rng.Validation.Delete(); rng.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlNotBetween, dataSource, Type.Missing); } catch(Exception ex) { MessageBox.Show(ex.Message); } rng.Validation.InCellDropdown = true; rng.Validation.IgnoreBlank = true; rng.Value2 = ""; }
这里,我假设我一个Excel中某一列的表头含有 "城市" 这个字段
public void SetValidation(_Worksheet _wsh) { for (int i = 1; i < 100; i++) { if (_wsh.Cells[2, i].Value == "城市") //这里的 2代表着表头所在行号 { AddData(_wsh, "中国,英国,美国",i); //数据源之间用英文 , 隔开 } } }
好了 现在可以写一个方法来进行调用了
public void GenerationExcel(string path) //path 是excel的地址 { Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); Workbooks wbks = app.Workbooks; _Workbook _wbk = wbks.Open(path); Sheets shs = _wbk.Sheets; _Worksheet _wsh = (_Worksheet)shs.get_Item(1); //得到第一张sheet页 try { SetValue(_wsh); app.AlertBeforeOverwriting = false; _wbk.Save(); //这里也可以用SaveAs(string SavePath) 来进行另存 app.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(app); app = null; MessageBox.Show("操作成功"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }