使用EPplus在Excel中添加下拉菜单

7

我需要帮助。如何使用Epplus在Excel中添加下拉菜单?无需验证。我只需要将其添加到我的模板中。 下拉列表中的记录并不是动态的。


2
请参见https://dev59.com/DXnZa4cB1Zd3GeqPsqj-。 - Will Sheppard
谢谢,但我需要一个更简单的。 - oGuReiSuo
2个回答

14
using (ExcelPackage p = new ExcelPackage()) {
    ExcelWorksheet ws = obj.CreateSheet(p, "sheetname", 1, true);
    var unitmeasure = ws.DataValidations.AddListValidation("a1");
    unitmeasure.Formula.Values.Add("Sq Ft");
    unitmeasure.Formula.Values.Add("Meter");
}

我尝试了这段代码,它可以正常工作(大约只有10行或更少),但是当我尝试用40行填充下拉列表时,我生成的Excel文件出现了问题。 - jase
这段代码对我来说在数百个单元格中完美运行。我想补充一下,值也可以像这样一次性填充:unitmeasure.Formula.Values.Add("square feet,square meter,坪") - Jérôme MEVEL
如果您的字符串长度超过255,则不正确。 - An Pham Karion Co.Ltd

1
请参考以下代码。通过跟随下面的代码,您可以添加尽可能多的数据以在Excel下拉菜单中显示。
using(ExcelPackage p = new ExcelPackage()) {
//Create Sheet and one dummy sheet and hide it.
ExcelWorksheet ws = p.Workbook.Worksheets.Add("Customer Import");
ExcelWorksheet roughSheet = p.Workbook.Worksheets.Add("Dummy_List");
roughSheet.Hidden = OfficeOpenXml.eWorkSheetHidden.Hidden;

DataTable dt = dataSource; //Your data from database.

if (dt.Rows.Count > 0) {
    roughSheet.Cells["F1"].Value = "Town";
    var count = 1;
    //Add data in dummy sheet.
    foreach(DataRow item in dt.Rows) {
        roughSheet.Cells[count + 1, 6].Value = 
    item["GEO_NAME"].ToString().Trim();
        count++;
    }
    //Start from row and column and max row and column based on data filled 
    in that column.

    startFrom = roughSheet.Cells[2, 6].ToString();
    startTo = roughSheet.Cells[count, 6].ToString();

    startFrom = "$" + startFrom.Substring(0, 1) + "$" + 
    startFrom.Substring(1);
    startTo = "$" + startTo.Substring(0, 1) + "$" + startTo.Substring(1);

    var roughSheetRange = startFrom + ":" + startTo;
    var range = ExcelRange.GetAddress(2, 7, ExcelPackage.MaxRows, 7);

    //finally pick the range from dummy sheet and fill in the desired 
    column of your sheet to make dropdown.
    var rangeListExcelDropDown = 
    ws.DataValidations.AddListValidation(range);
    rangeListExcelDropDown.Formula.ExcelFormula = "Dummy_List!" + 
    roughSheetRange.ToString();
}
}

不要通过对字符串进行操作来计算"roughSheetRange",而是直接使用EPPlus内置的ExcelRange。如果只是这样做,它将包括工作表名称、$符号和其他所有内容:ws.DataValidations.AddListValidation(range).Formula.ExcelFormula = roughSheet.Cells[2, 6, count, 6].FullAddressAbsolute; - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接