使用Apache POI清除以前选择的EXCEL下拉列表

时间:2018-06-13 09:26:21

标签: apache apache-poi npoi

我使用HSSFWORKBOOK使用Apache NPOI dll开发了excel。但在我的Excel中有3个相互依赖的下拉列表。

这里我的问题是我无法清除依赖下拉列表的单元格值。假设dropdown1具有国家值,并且在选择此dropdown2状态值时得到一个过滤器并选择其中一个状态。现在,如果我再次更改国家能够过滤数据,但无论以前的状态选择是否都被清除。

Here is the Sample that dropdown 2 and 3 are not cleared if i changed the dropdown1 value.

代码参考:

不,我只是使用公式将sheet2中的列数据列表引用到sheet1。下面是代码ref:

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {

                    //if (i >= MaxRowCount)
                    //{
                    //    sheet2.CreateRow(1000 + i).CreateCell(1).SetCellValue(ds.Tables[0].Rows[i][1].ToString());
                    //    MaxRowCount += 1;
                    //}
                    //else
                    //    sheet2.GetRow(1000 + i).CreateCell(1).SetCellValue(ds.Tables[0].Rows[i][1].ToString());

                    if (CategoryCount == 250)
                    {
                        rownumber = rownumber + 3000;
                        CategoryCount = 16;
                        MaxRowCount = 0;

                    }

                    DataRow[] DR = ds.Tables[1].Select("LOCATION_ID=" + ds.Tables[0].Rows[i][0].ToString());
                    int RowCount = 0;

                    //int rownumber = 1000;
                    foreach (DataRow d in DR)
                    {

                        if (RowCount >= MaxRowCount)
                        {
                            sheet2.CreateRow(rownumber + RowCount).CreateCell(CategoryCount).SetCellValue(d[0].ToString());
                            MaxRowCount += 1;
                        }
                        else
                        {
                            sheet2.GetRow(rownumber + RowCount).CreateCell(CategoryCount).SetCellValue(d[0].ToString());
                        }
                        RowCount++;
                    }





IName DeptHierarchy_Dept = hssfworkbook.CreateName();
                            DeptHierarchy_Dept.NameName = "XDeptHierarchy_Dept_SUB" + (XDeptHierarchy_Dept_SUBCount).ToString();
                            if (CategoryCount / 26 < 1)
                                DeptHierarchy_Dept.RefersToFormula = "'Template Field Specs2'!$" + ((char)(65 + CategoryCount)).ToString() + "$" + (StartRowNumber + 1) + ":$" + ((char)(65 + CategoryCount)).ToString() + "$" + ((StartRowNumber + 1) + (RowCount == 0 ? 0 : RowCount - 1)).ToString();
                            else
                                DeptHierarchy_Dept.RefersToFormula = "'Template Field Specs2'!$" + ((char)(65 + (CategoryCount / 26) - 1)).ToString() + ((char)(65 + CategoryCount % 26)).ToString() + "$" + (StartRowNumber + 1) + ":$" + ((char)(65 + (CategoryCount / 26) - 1)).ToString() + ((char)(65 + CategoryCount % 26)).ToString() + "$" + ((StartRowNumber + 1) + (RowCount == 0 ? 0 : RowCount - 1)).ToString();
                            CategoryCount++;
                            XDeptHierarchy_Dept_SUBCount++;

1 个答案:

答案 0 :(得分:0)

您正在寻找“相关下拉列表”。你必须对你的公式有创意,因为你的行会不断变化。 我能想到的一种方法是将“国家资本”列表存储在指定区域,其中一些位于excel深处。在选择国家/地区时,解析并从指定区域查找资金并填充目标单元格。 请参阅documentation。 这也是link;