Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于使用ApachePOI库创建下拉列表而导致Excel corrput_Java_Excel_Apache Poi - Fatal编程技术网

Java 由于使用ApachePOI库创建下拉列表而导致Excel corrput

Java 由于使用ApachePOI库创建下拉列表而导致Excel corrput,java,excel,apache-poi,Java,Excel,Apache Poi,需要说明 我需要使用apachepoi在Excel中创建一个下拉列表。此列表应包含字符串 代码 XSSFSheet sheet = workbook.getSheet(fieldName.getTabName()); XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet); XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstra

需要说明

我需要使用
apachepoi
在Excel中创建一个下拉列表。此列表应包含字符串

代码

XSSFSheet sheet = workbook.getSheet(fieldName.getTabName());
XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) helper.createExplicitListConstraint(myarray);
CellRangeAddressList addressList = new CellRangeAddressList(3, 10, 5, 5);
XSSFDataValidation validation = (XSSFDataValidation) helper.createValidation(dvConstraint, addressList);
validation.setEmptyCellAllowed(false);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
错误

对于某些内容来说,它运行良好。但是如果数组
myarray
包含一些值,如
STUDENT
HOUSE,DEF
,则我在打开Excel时出错:

我们发现“file.xlsx”中的某些内容存在问题。你想让我们尽力恢复吗?如果您信任工作簿的来源,请单击“是”

其他信息

我的数组
列表
。我得到这份名单是因为:

Select select = new Select(By.xpath("myxpath"));
List<WebElement> opt = select.getOptions();
myarray = new String[opt.size()];
for(int i = 0; i < opt.size(); i++) 
    myarray[i] = opt.get(i).getText();
Select=newselect(By.xpath(“myxpath”);
List opt=select.getOptions();
myarray=新字符串[opt.size()];
对于(int i=0;i
但我认为这段代码不是问题所在,因为我能够获得所有与文本相关的选项。当我将此内容放入
createExplicitListConstraint
时,奇怪的事情发生了


当我打印
myarray
的内容时,所有值都会在控制台中正确显示。

显式数据验证列表的公式长度有限制。最大长度为255。如果显式数据验证列表的公式长度超过255,则
Excel
在打开时失败,出现错误
我们在…
中发现一些内容有问题。如果单击
Yes
Excel
会告诉您它已修复了
/xl/sheet/sheet*.xml
零件。之后,数据验证列表将不起作用

复制示例:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddressList;

class CreateExcelDataValidationExplicitList {

 public static void main(String[] args) throws Exception {

  int arrSize = 50;
  String[] myarray = new String[arrSize+1];

  for (int i = 0; i < arrSize; i++) {
   myarray[i] = "abcd";
  }

  myarray[arrSize] = "abcde"; // this works
  //myarray[arrSize] = "abcdef"; // this fails

  String arrayFormula = String.join(",", myarray);
System.out.println(arrayFormula.length()); // up to 255 works, bigger lengths fail

  //Workbook workbook = new HSSFWorkbook();
  Workbook workbook = new XSSFWorkbook();

  Sheet sheet = workbook.createSheet();

  DataValidationHelper dvHelper = sheet.getDataValidationHelper();
  CellRangeAddressList addressList = new CellRangeAddressList(3, 10, 5, 5);
  DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(myarray);

  DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
  validation.setEmptyCellAllowed(false);
  if (workbook instanceof XSSFWorkbook) validation.setShowErrorBox(true);

  sheet.addValidationData(validation);

  FileOutputStream out = null;
  if (workbook instanceof HSSFWorkbook) {
   out = new FileOutputStream("CreateExcelDataValidationExplicitList.xls");
  } else if (workbook instanceof XSSFWorkbook) {
   out = new FileOutputStream("CreateExcelDataValidationExplicitList.xlsx");
  }
  workbook.write(out);
  workbook.close();
  out.close();

 }
}
import java.io.FileOutputStream;
导入org.apache.poi.ss.usermodel.*;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.util.CellRangeAddressList;
类CreateExcelDataValidationExplicitList{
公共静态void main(字符串[]args)引发异常{
int arrSize=50;
String[]myarray=新字符串[arrSize+1];
对于(int i=0;i

唯一的解决方案是将列表项放在单独工作表的单元格中,然后使用
createFormulaListConstraint
而不是
createExplicitListConstraint
。我已经在这里展示了:。

显式数据验证列表的公式长度有一个限制。最大长度为255。如果显式数据验证列表的公式长度超过255,则
Excel
在打开时失败,出现错误
我们在…
中发现一些内容有问题。如果单击
Yes
Excel
会告诉您它已修复了
/xl/sheet/sheet*.xml
零件。之后,数据验证列表将不起作用

复制示例:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddressList;

class CreateExcelDataValidationExplicitList {

 public static void main(String[] args) throws Exception {

  int arrSize = 50;
  String[] myarray = new String[arrSize+1];

  for (int i = 0; i < arrSize; i++) {
   myarray[i] = "abcd";
  }

  myarray[arrSize] = "abcde"; // this works
  //myarray[arrSize] = "abcdef"; // this fails

  String arrayFormula = String.join(",", myarray);
System.out.println(arrayFormula.length()); // up to 255 works, bigger lengths fail

  //Workbook workbook = new HSSFWorkbook();
  Workbook workbook = new XSSFWorkbook();

  Sheet sheet = workbook.createSheet();

  DataValidationHelper dvHelper = sheet.getDataValidationHelper();
  CellRangeAddressList addressList = new CellRangeAddressList(3, 10, 5, 5);
  DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(myarray);

  DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
  validation.setEmptyCellAllowed(false);
  if (workbook instanceof XSSFWorkbook) validation.setShowErrorBox(true);

  sheet.addValidationData(validation);

  FileOutputStream out = null;
  if (workbook instanceof HSSFWorkbook) {
   out = new FileOutputStream("CreateExcelDataValidationExplicitList.xls");
  } else if (workbook instanceof XSSFWorkbook) {
   out = new FileOutputStream("CreateExcelDataValidationExplicitList.xlsx");
  }
  workbook.write(out);
  workbook.close();
  out.close();

 }
}
import java.io.FileOutputStream;
导入org.apache.poi.ss.usermodel.*;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.util.CellRangeAddressList;
类CreateExcelDataValidationExplicitList{
公共静态void main(字符串[]args)引发异常{
int arrSize=50;
String[]myarray=新字符串[arrSize+1];
对于(int i=0;i
唯一的解决方案是将列表项放在单独工作表的单元格中,然后使用
createFormulaListConstraint
而不是
createExplicitListConstraint
。我已经在这里展示了:。

它将是ve