我正在开发一个写入excel文件的项目。我正在使用HSSF POI。就编写excel文件而言,我的代码工作得很好但是我遇到了有关格式化的问题。我想让每列都具有特定的宽度。我为此做了研究,并且我确信我正在完全遵循所描述的内容,但是单元格在运行时没有改变。以下是我的代码:
测试类
package mainClass;
import parsing.WriteExcel;
public class TestClass
{
public static void main(String args[]){
WriteExcel wExcel = new WriteExcel();
wExcel.writeExcel();
}
}
写课
package parsing;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javafx.scene.control.Cell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
public class WriteExcel
{
private static final String FILE_PATH = "C:\\Users\\jhamric\\Documents\\PainDifferences.xls";
public void writeExcel(){
ArrayList<String> sample1 = new ArrayList<String>();
ArrayList<String> sample2 = new ArrayList<String>();
sample1.add("1");
sample1.add("2");
sample2.add("a");
sample2.add("b");
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Unmatched Transactions");
sheet.setColumnWidth(1, 25);
HSSFFont fontBold = workbook.createFont();
fontBold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle styleBold = workbook.createCellStyle();
styleBold.setFont(fontBold);
Map<String, Object[]> data = new HashMap<String, Object[]>();
data.put("0",new Object[]{"Number","Letter"});
//for(int i = 0; i < ParseFiles.InstrId.size(); i++){
for(int i = 0; i < sample1.size(); i++){
String currentIString = Integer.toString(i+1);
data.put(currentIString, new Object[]{sample1.get(i),sample2.get(i)});
//data.put(currentIString, new Object[]{ParseFiles.InstrId.get(i)});
}
Set<String> keyset = data.keySet();
int rownum = 0;
for(String key: keyset){
Row row = sheet.createRow(rownum++);
Object[] objArr = data.get(key);
int cellnum = 0;
for(Object obj : objArr){
org.apache.poi.ss.usermodel.Cell cell = row.createCell(cellnum++);
if(cell.toString().equals("Number")){
cell.setCellStyle(styleBold);
}
cell.setCellValue((String)obj);
}
}
try{
FileOutputStream out = new FileOutputStream(new File(FILE_PATH));
workbook.write(out);
out.close();
workbook.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
具体来说,我在此处声明了设置列宽的代码:
sheet.setColumnWidth(1, 25);
我的理解是第一个数字是索引(因此它实际上是第二列),第二个数字是字符长度,因此列中的所有单元格应该是25个字符长的空格。
我很感激你的任何帮助!
答案 0 :(得分:0)
我发现了问题。
该值实际上不是字符数,而是其他内容。我尝试了5000并正确调整了列的大小。
答案 1 :(得分:0)
真正的答案是Sheet.setColumnWidth(int index, int width)
将列的列设置为宽度/ 256。在断言中,索引是基于零的列号是正确的。宽度以字符的1/256指定。
答案 2 :(得分:0)
要将宽度设置为需要传递的25个字符(1,25 * 256)