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);
            }
        }

 

posted @ 2012-09-04 09:43  消逝的落叶  阅读(914)  评论(0编辑  收藏  举报