我正在尝试使用Apache
POI为一个单元添加一个下拉列表。下拉列表包含302个字符串。我总是收到此错误:Excel在test.xlsx中发现了不可读的内容。
然后,我进行了以下测试。当项目数<= 88时,下拉列表创建成功。当数字> 88时,打开excel文件且没有下拉列表时出现错误。
谢谢 !!!
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
TreeSet<String> temp_rxGroups = new TreeSet<String>();
for (int i = 0; i < 100; i++) {
temp_rxGroups.add("" + i);
}
String[] countryName = temp_rxGroups.toArray(new String[temp_rxGroups.size()]);
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet realSheet = workbook.createSheet("realSheet");
XSSFSheet hidden = workbook.createSheet("hidden");
for (int i = 0, length= countryName.length; i < length; i++) {
String name = countryName[i];
XSSFRow row = hidden.createRow(i);
XSSFCell cell = row.createCell(0);
cell.setCellValue(name);
}
Name namedCell = workbook.createName();
namedCell.setNameName("hidden");
namedCell.setRefersToFormula("hidden!$A$1:$A$" + countryName.length);
DataValidation dataValidation = null;
DataValidationConstraint constraint = null;
DataValidationHelper validationHelper = null;
validationHelper=new XSSFDataValidationHelper(hidden);
CellRangeAddressList addressList = new CellRangeAddressList(0,10,0,0);
//line
constraint =validationHelper.createExplicitListConstraint(countryName);
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
workbook.setSheetHidden(1, true);
realSheet.addValidationData(dataValidation);
FileOutputStream stream = new FileOutputStream("c:\\test.xlsx");
workbook.write(stream);
stream.close();
}
}
}
首先,我发现这不是Apache
POI错误。这是Excel的限制。这是链接,
“在数据验证下拉列表中显示的项目数有限制:
该列表可以显示以显示工作表上的列表中的32,767个项目。如果您在数据验证对话框(定界列表)中键入项目,则限制为256个字符,包括分隔符。”
显然,该行明确输入了256个以上的字符。
constraint =validationHelper.createExplicitListConstraint(countryName);
其次,这是我的解决方案。它工作正常。
public class Test {
public static void main(String[] args) throws IOException{
TreeSet<String> temp_rxGroups = new TreeSet<String>();
for (int i = 0; i < 302; i++) {
temp_rxGroups.add("" + i);
}
String[] countryName = temp_rxGroups.toArray(new String[temp_rxGroups.size()]);
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet realSheet = workbook.createSheet("realSheet");
XSSFSheet hidden = workbook.createSheet("hidden");
for (int i = 0, length= countryName.length; i < length; i++) {
String name = countryName[i];
XSSFRow row = hidden.createRow(i);
XSSFCell cell = row.createCell(0);
cell.setCellValue(name);
}
DataValidation dataValidation = null;
DataValidationConstraint constraint = null;
DataValidationHelper validationHelper = null;
validationHelper=new XSSFDataValidationHelper(realSheet);
CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0);
constraint =validationHelper.createFormulaListConstraint("hidden!$A$1:$A$" + countryName.length);
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
workbook.setSheetHidden(1, true);
realSheet.addValidationData(dataValidation);
FileOutputStream stream = new FileOutputStream("c:\\test.xlsx");
workbook.write(stream);
stream.close();
}
}
问题内容: 大多数网站都需要某种方式来显示用户首选时区中网站上的日期。以下是我找到的两个列表,然后是使用 PHP 5中内置的PHP DateTime类的一种方法。 我需要帮助,以了解在尝试从注册用户那里获取UTC偏移量时,最好使用哪种方法。 一: 或使用PHP友好值: 或仅使用PHP本身: 似乎最后一个将是最安全的,因为它将随着使用的PHP版本而增长。您还可以在需要时将时区与城市名称关联时翻转该数
我们在基于java的web应用程序中有一个功能,用户可以从web应用程序下载excel表模板。在此模板中填写他们的数据,然后上载相同的excel工作表。 然后系统读取此excel文件并将此数据保存到数据库中。 下面是模板文件的快照,其中有一些示例数据。 我想要的是,当用户下载模板文件(模板文件通常只有标题,所以用户知道哪些数据在哪一列)时,excel表应该有部门、产品、二级产品、地区和国家的下拉列
我需要使用Apache POI在excel文件中创建一个下拉列表。我能够做到这一点,但我不能使下拉列表中的第一个项目作为默认项目。
问题内容: 我试图确定每个项目的确定性,如果它们在JComboBox下拉列表的JViewPort中不可见 (我的周五OT) 编辑:我不想实现MouseListener重复事件到System.out.print(…) 无法通过JCombo#Model通过使用SwingUtilities http://download.oracle.com/javase/6/docs/api/javax/swing/
嗨Stackoverflow社区, 如果满足条件,我想添加一个数据验证下拉列表。 如果“最终侦察”出现在C列中,则以以下状态填充下拉列表:“最终”或“正在审查”,否则不要填充下拉列表。 我可以使用非VBA验证列表,但在这种类型的评估审查中,我需要使用VBA版本。 这就是我到目前为止所拥有的,我被困得很厉害。我在C栏有“最终侦察”,如果最终侦察出现在C栏,然后用“最终”和“正在审查”的选项填充下拉列
我的方法我尝试使用名称范围为我的2列。然后转到下一个工作表并创建2列(CountryInput,CitiesInput)。在名为CountryInput的专栏中,我进入数据验证工具以创建第一个下拉列表。CitiesInput列应该依赖于CountryInput是我遇到的问题。我尝试使用indirect=a2函数,但没有任何结果。 我也可以使用vba或宏来做这件事吗?