学习笔记,方便以后查阅。参考https://github.com/pruiz/EPPlus/blob/master/SampleApp/Sample11.cs
Epplus版本:4.0.4.0
采用Epplus处理Excel,实现简单的二级联动。闲话不说,就是喜欢代码:
程序中用到的连个类:省份、城市
主要代码:public class Province { public int ProvinceId { get; set; } public string ProvinceName { get; set; } public List
GetList() { return new List () { new Province() {ProvinceId=1,ProvinceName="北京市" }, new Province() {ProvinceId=2,ProvinceName="河北省" }, new Province() {ProvinceId=3,ProvinceName="河南省" } }; } } public class City { public int CityId { get; set; } public int ProvinceId { get; set; } public string CityName { get; set; } public List GetList() { return new List () { new City() {CityId=1,ProvinceId=1,CityName="东城区" }, new City() {CityId=2,ProvinceId=1,CityName="西城区" }, new City() {CityId=3,ProvinceId=1,CityName="朝阳区" }, new City() {CityId=4,ProvinceId=1,CityName="海淀区" }, new City() {CityId=5,ProvinceId=1,CityName="丰台区" }, new City() {CityId=6,ProvinceId=1,CityName="昌平区" }, new City() {CityId=7,ProvinceId=1,CityName="房山区" }, new City() {CityId=8,ProvinceId=1,CityName="大兴区" }, new City() {CityId=9,ProvinceId=1,CityName="通州区" }, new City() {CityId=10,ProvinceId=1,CityName="石景山区" }, new City() {CityId=11,ProvinceId=2,CityName="石家庄" }, new City() {CityId=12,ProvinceId=2,CityName="张家口" }, new City() {CityId=13,ProvinceId=2,CityName="承德" }, new City() {CityId=14,ProvinceId=2,CityName="秦皇岛" }, new City() {CityId=15,ProvinceId=2,CityName="沧州" }, new City() {CityId=16,ProvinceId=2,CityName="衡水" }, new City() {CityId=17,ProvinceId=2,CityName="邯郸" }, new City() {CityId=18,ProvinceId=3,CityName="郑州" }, new City() {CityId=19,ProvinceId=3,CityName="商丘" }, new City() {CityId=20,ProvinceId=3,CityName="驻马店" }, new City() {CityId=21,ProvinceId=3,CityName="新乡" }, new City() {CityId=22,ProvinceId=3,CityName="焦作" } }; } } 说明:程序会自动在网站根路径下创建Output.xlsx。FileInfo output = new FileInfo(Server.MapPath("~/Output.xlsx")); if (output.Exists) { output.Delete(); output = new FileInfo(Server.MapPath("~/Output.xlsx")); } using (var package = new ExcelPackage(output)) { // 添加工作表 为下拉框提供数据源 var sheet = package.Workbook.Worksheets.Add("SourceSheet"); List
ls_p = new Province().GetList(); List ls_c = new City().GetList(); for (int i = 0; i < ls_p.Count; i++) { var item = ls_p[i]; sheet.Cells[1, i + 1].Value = item.ProvinceName; sheet.Cells[1, i + 1].Style.Font.Bold = true; List ls_temp_c = (from p in ls_c where p.ProvinceId == item.ProvinceId select p).ToList(); int tempCityCount = ls_temp_c.Count; for (int j = 0; j < tempCityCount; j++) { var tempCoty = ls_temp_c[j]; sheet.Cells[j + 2, i + 1].Value = tempCoty.CityName; } if (tempCityCount > 0) { var tempName = package.Workbook.Names.Add(item.ProvinceName, sheet.Cells[2, i + 1, tempCityCount + 1, i + 1]); //var tempName = sheet.Names.Add(item.ProvinceName, sheet.Cells[2, i + 1, tempCityCount + 1, i + 1]); } } //sheet.Names.Add("省份", sheet.Cells[1, 1, 1, ls_p.Count]); //名称管理器 使用范围sheet 这里指SourceSheet package.Workbook.Names.Add("省份", sheet.Cells[1, 1, 1, ls_p.Count]); // 添加工作表 展示下拉框 var homeSheet = package.Workbook.Worksheets.Add("HomeSheet"); homeSheet.Cells["A1"].Style.Font.Bold = true; homeSheet.Cells["B1"].Style.Font.Bold = true; homeSheet.Cells["A1"].Value = "省份"; homeSheet.Cells["B1"].Value = "城市"; //数据有效性或者数据验证 //省份下拉框 var validation = homeSheet.DataValidations.AddListValidation("A2:A10"); validation.ShowErrorMessage = true; validation.ErrorStyle = ExcelDataValidationWarningStyle.warning; validation.ErrorTitle = "An invalid value was entered"; validation.Error = "Select a value from the list"; validation.Formula.ExcelFormula = "省份"; //城市下拉框 var validation2 = homeSheet.DataValidations.AddListValidation("B2:B10"); validation2.ShowErrorMessage = true; validation2.ErrorStyle = ExcelDataValidationWarningStyle.warning; validation2.ErrorTitle = "An invalid value was entered"; validation2.Error = "Select a value from the list"; validation2.Formula.ExcelFormula = "INDIRECT($A2)"; package.SaveAs(output); }
截图如下:
工作表:资源(点击【公式】-【名称管理器】)
工作表:下拉框
到此结束。这里发现一点小问题,就是选中省份例如北京然后是选择城市例如朝阳区,之后修改北京为河北或者其他,此时城市没有改变,让然是朝阳区。要是能修改就好了。希望大神多多指教,谢谢。