Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
ApachePOI for Excel:将单元格类型设置为";“文本”;整列_Excel_Xls_Apache Poi_Xlsx - Fatal编程技术网

ApachePOI for Excel:将单元格类型设置为";“文本”;整列

ApachePOI for Excel:将单元格类型设置为";“文本”;整列,excel,xls,apache-poi,xlsx,Excel,Xls,Apache Poi,Xlsx,我需要使用Java库生成一个.xls(Excel)文件 该文件将在a列中包含电话号码列表,格式为“0221…”或“+49221…”-因此Excel默认情况下将其解释为数字单元格。这是不好的,因为前导的0或+将被修剪 为了解决这个问题,我可以使用cell.setCellType(cell.cell\u TYPE\u STRING),它可以很好地工作,但只适用于我为其设置的特定单元格 如何将此设置应用于整个列(即,即使是所有剩余的单元格,用户将在其中输入其他电话号码) 在Excel中,这是可能的:选

我需要使用Java库生成一个.xls(Excel)文件

该文件将在a列中包含电话号码列表,格式为“0221…”或“+49221…”-因此Excel默认情况下将其解释为数字单元格。这是不好的,因为前导的0或+将被修剪

为了解决这个问题,我可以使用
cell.setCellType(cell.cell\u TYPE\u STRING)
,它可以很好地工作,但只适用于我为其设置的特定单元格

如何将此设置应用于整个列(即,即使是所有剩余的单元格,用户将在其中输入其他电话号码)

在Excel中,这是可能的:选择整个列,并应用单元格类型(该设置在保存/加载文件后仍然有效)

但是我找不到正确的POI方法

  • 首先,我假设它应该类似于
    sheet.setDefaultCellType(int colNum)
    。但我找不到类似的东西(可能我只是瞎了眼?库中有很多应用文本样式的工具,如“对齐中心”等)
  • 然后我想:也许它只能应用于a或类似的东西,但我还没有弄清楚它是如何工作的
    • 会有帮助吗

      通过创建带有@符号的数据格式并在CellStyle中使用它 对象,然后将其传递给setDefaultColumnStyle()方法 在本例中,可以将列的默认数据类型设置为文本。 我还没有做进一步的实验,但确实怀疑这是可能的 与其他样式对象类似的内容,以将默认类型设置为 数字格式,甚至是自定义格式,如货币


      下面是一些受Vlad答案启发的示例代码:

      DataFormat fmt = workbook.createDataFormat();
      CellStyle textStyle = workbook.createCellStyle();
      textStyle.setDataFormat(fmt.getFormat("@"));
      worksheet.setDefaultColumnStyle(0, textStyle);
      
      上述代码将工作表第一列的默认样式设置为文本

      谢谢你,弗拉德

      Vlad: 这就解决了大部分问题。我发现所有空行的格式都是我想要的。然而,我有初始零的行看起来和工作良好;但是,如果我必须用另一个以零开始的值来更改一个预先存在的值,那么零就会消失。因此,我建议在单元格中创建值时添加代码,以将setCellStyle重置为文本。以下是一些片段: 方法公共单元格createCell(行r!,BBjNumber单元格,BBjString值!)

      methodret c

      #text_format! = #wb!.createCellStyle()
      #text_format!.setDataFormat(#format!.getFormat("@"))
      
      方法端

      这可能有助于其他一些单独搜索初始零。 谢谢你的发帖。
      Alex

      现在使用POI设置它的更好方法是使用
      内置信息类

      例如:

      将列类型转换为数字的步骤

       CellStyle numericStyle = workbook.createCellStyle(); 
       numericStyle.setDataFormat(BuiltinFormats.getBuiltinFormat(2)); // 2 For Number 
       worksheet.setDefaultColumnStyle(colId, numericStyle);
      

      可以看到
      内置信息格式的完整列表,

      看起来不错!一旦我回到项目中,我将尝试这个解决方案。谢谢我也这么做了。var cllstyl=this.Workbook.CreateCellStyle();var工作簿=新的HSSF工作簿();var currDataFormat=workbook.CreateDataFormat();cllstyl.DataFormat=currDataFormat.GetFormat(“@”);sheet.SetDefaultColumnStyle(1,cllstyl);但它不显示“文本”格式,而是显示“日期”。请帮我做这个。
       CellStyle numericStyle = workbook.createCellStyle(); 
       numericStyle.setDataFormat(BuiltinFormats.getBuiltinFormat(2)); // 2 For Number 
       worksheet.setDefaultColumnStyle(colId, numericStyle);