精华内容
下载资源
问答
  • Java POI 设置Excel单元格宽度和高度

    万次阅读 2017-05-16 17:55:03
    来源:...在Excel中,单元格宽度其实就是列的宽度,因为Excel假设这一列的单元格宽度肯定一致。所以要设置

    来源:http://www.jfox.info/java-poi-%E8%AE%BE%E7%BD%AEexcel%E5%8D%95%E5%85%83%E6%A0%BC%E7%9A%84%E5%AE%BD%E5%BA%A6%E5%92%8C%E9%AB%98%E5%BA%A6


    在Excel中,单元格的宽度其实就是列的宽度,因为Excel假设这一列的单元格的宽度肯定一致。所以要设置单元格的宽度,我们就得从列的宽度下手,HSSFSheet有个方法叫SetColumnWidth,共有两个参数:一个是列的索引(从0开始),一个是宽度。

    现在假设你要设置B列的宽度,就可以用下面的代码:

     

    HSSFWorkbook hssfworkbook = new HSSFWorkbook();

    HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1″);

    sheet1.SetColumnWidth(1, 100 * 256);

    这里你会发现一个有趣的现象,SetColumnWidth的第二个参数要乘以256,这是怎么回事呢?其实,这个参数的单位是1/256个字符宽度,也就是说,这里是把B列的宽度设置为了100个字符。

    刚才说的是如何设置,那如何去读取一个列的宽度呢?直接用GetColumnWidth方法,这个方法只有一个参数,那就是列的索引号。如下所示:

    int col1width = sheet1.GetColumnWidth(1);

     

    说完宽度,我们来说高度,在Excel中,每一行的高度也是要求一致的,所以设置单元格的高度,其实就是设置行的高度,所以相关的属性也应该在HSSFRow上,它就是HSSFRow.Height和HeightInPoints,这两个属性的区别在于HeightInPoints的单位是点,而Height的单位是1/20个点,所以Height的值永远是HeightInPoints的20倍。

    要设置第一行的高度,可以用如下代码:

    sheet1.CreateRow(0).Height = 200*20;

     

    或者

    sheet1.CreateRow(0).HeightInPoints = 200;

    如果要获得某一行的行高,可以直接拿HSSFRow.Height属性的返回值。

     

    你可能觉得一行一行设置行高或者一列一列设置列宽很麻烦,那你可以考虑使用HSSFSheet.DefaultColumnWidth、HSSFSheet.DefaultRowHeight和HSSFSheet.DefaultRowHeightInPoints属性。

    一旦设置了这些属性,如果某一行或者某一列没有设置宽度,就会使用默认宽度或高度。代码如下:

    sheet1.DefaultColumnWidth=100*256;

    sheet1.DefaultRowHeight=30*20;

     


    展开全文
  • ...使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已。这两天帮一个朋友做一个Excel... 问题描述:通过JavaExcel的一个单元格中写

    http://www.cnblogs.com/riskyer/p/3293998.html


    使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已。这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇到的类似的问题。

          问题描述:通过Java向Excel的一个单元格中写入大量的文字,即使在文字中使用  \n  符号进行换行操作,当打开Excel表格的时候,发现文字不能按照我们预先设定的方法换行,而是显示在一行里面,导致整个Excel表格显示都乱掉了。必须得通过鼠标单击一下这个单元格文字才能按照单元格的宽度和程序中的换行命令实现换行的显示效果。

          这就很不爽了,每次我打开Excel的时候,还要把文字多的单元格全部用鼠标单击一下,才能按照我程序设定的显示方式显示。

          不过,后来仔细想一下,其实就是需要文字按照单元格设定的宽度/高度显示文本就行了,API中应该有相应的方法来实现的,只是我没找到而已。功夫不负有心人,在Google的帮助下,终于在百花丛中发现了她。

     

    WritableFont fontTitle = new WritableFont(WritableFont.TIMES, 9, WritableFont.NO_BOLD);
    fontTitle.setColour(jxl.format.Colour.RED);
    WritableCellFormat formatTitle = new WritableCellFormat(fontTitle);
    formatTitle.setWrap(true);
    /*-------------------------------------------------------------------------*/
    WritableSheet       m_sheet = null;
    m_sheet = m_writeBook.createSheet("第一页", 0);            
    m_sheet.setColumnView(0, 10);            
    m_sheet.setRowView(0, 500);            
    Label label  =   new  Label(0,  0,  "阿科是个不错的小伙子阿科是个不错" +
                   "的小伙子阿科是个不错的小伙子", format);   
    //将定义好的单元格添加到工作表中    
    m_sheet.addCell(label);  
    

            如上例当中,虽然列宽设置的仅仅是10,而文字的长度远远的超过10,但是由于使用WritableCellFormat的设置选项: formatTitle.setWrap(true)。从而使得单元格的文字按照单元格的列宽来自动换行显示。


    展开全文
  • // 新建sheet同时往sheet加入数据后,进行列宽设置,代码如下: ...// outputList.get(0).size()为首行的列数,根据首行列数循环设置每一列的宽度 for (int columnIndex = 0; columnIndex < ...
    // 新建sheet同时往sheet加入数据后,进行列宽设置,代码如下:
    
    // 固定首行,下拉时实现首行固定不动
    sheet.createFreezePane( 0, 1, 0, 1 );
    // 列宽自适应
    // outputList.get(0).size()为首行的列数,根据首行列数循环设置每一列的宽度
    for (int columnIndex = 0; columnIndex < outputList.get(0).size(); columnIndex++) {
    	int columnWidth = sheet.getColumnWidth(columnIndex) / 256;
    	for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
    		XSSFRow currentRow;
    		// 当前行未被使用过
    		if (sheet.getRow(rowIndex) == null) {
    			currentRow = sheet.createRow(rowIndex);
    		} else {
    			currentRow = sheet.getRow(rowIndex);
    		}
    		if (currentRow.getCell(columnIndex) != null) {
    			XSSFCell currentCell = currentRow.getCell(columnIndex);
    			if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
    				int length = 0;
    				try {
    					length = currentCell.getStringCellValue().getBytes().length;
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    				if (columnWidth < length) {
    					columnWidth = length;
    				}
    			}
    		}
    	}
    
    	sheet.setColumnWidth(columnIndex, (columnWidth) * 256);
    }

    效果如下

     

    展开全文
  • POI导出excel单元格宽度自适应

    千次阅读 2021-01-26 19:45:21
    package com.tgpms.util; import ... import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Font;...import java.io.File; imp.
    package com.tgpms.util;
    
    import cn.hutool.core.util.StrUtil;
    import org.apache.poi.hssf.usermodel.*;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Font;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @author jiangli
     * @since 2021/1/26 17:42
     */
    public class ExportExcelUtil {
    
        public static void downloadExcel(String excelName, List<String> tableHead, List<LinkedList<String>> tableBody, HttpServletResponse response) throws IOException {
            // 1:创建一个workbook
            HSSFWorkbook workbook = new HSSFWorkbook();
    
            // 创建样式
            HSSFCellStyle style = workbook.createCellStyle();
            Font font = workbook.createFont();
            font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 粗体
            style.setFont(font);
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
            style.setBorderTop((short) 1);
            style.setBorderBottom((short) 1);
            style.setBorderLeft((short) 1);
            style.setBorderRight((short) 1);
            style.setWrapText(true);
    
            // 设置合计样式
            HSSFCellStyle style1 = workbook.createCellStyle();
            style1.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
            style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
            style1.setBorderTop((short) 1);
            style1.setBorderBottom((short) 1);
            style1.setBorderLeft((short) 1);
            style1.setBorderRight((short) 1);
            style.setWrapText(true);
    
            HSSFSheet sheet = (HSSFSheet) workbook.createSheet(excelName);
    
    //        // 2:合并单元格,表头。并设置值
    //        CellRangeAddress cra = new CellRangeAddress(0, 0, 0, tableHead.size() - 1);
    //        sheet.addMergedRegion(cra);
    //        HSSFRow row = sheet.createRow(0);
    //        HSSFCell tableName = row.createCell(0);
    //        tableName.setCellStyle(style);
    //        tableName.setCellValue(excelName);
    
            //存储最大列宽
            Map<Integer,Integer> maxWidth = new HashMap<>();
    
            // 3:设置表head
            HSSFRow row1 = sheet.createRow(0);
            for (int i = 0; i < tableHead.size(); i++) {
                Cell createCell = row1.createCell(i);
                createCell.setCellValue(tableHead.get(i));
                createCell.setCellStyle(style);
                maxWidth.put(i,createCell.getStringCellValue().getBytes().length  * 256 + 200);
            }
    
            // 4:表格内容
            for (int i = 0; i < tableBody.size(); i++) {
                HSSFRow rows = sheet.createRow(i + 1);
                int j = 0;
                LinkedList<String> linkedList = tableBody.get(i);
                for (String s : linkedList) {
                    HSSFCell createCell = rows.createCell(j);
                    if(StrUtil.isNotBlank(s)){
                        createCell.setCellValue(s);
                    }else{
                        createCell.setCellValue("");
                    }
                    int length = createCell.getStringCellValue().getBytes().length  * 256 + 200;
                    //这里把宽度最大限制到15000
                    if (length>15000){
                        length = 15000;
                    }
                    maxWidth.put(j,Math.max(length,maxWidth.get(j)));
                    j++;
                    createCell.setCellStyle(style1);
                }
            }
    
            // 列宽自适应
            for (int i = 0; i < tableHead.size(); i++) {
                sheet.setColumnWidth(i,maxWidth.get(i));
            }
    
            // 5:设置头
            response.setHeader("Content-disposition",
                    "attachment; filename=" + new String(excelName.getBytes("GB2312"), "ISO8859-1") + ".xls");
            // 6:设置头类型
            response.setContentType("application/vnd.ms-excel");
    
            // 7:写出
            OutputStream toClient = response.getOutputStream();
            workbook.write(toClient);
            toClient.flush();
            toClient.close();
        }
    }
    
        public void exportSummaryInfo(HealthQueryParam healthQueryParam, HttpServletResponse response) {
            ManagementSysuser managementSysuser = LoginInterceptor.loginUser.get();
            if (managementSysuser == null) {
                throw new ProjectException("请先登录");
            }
            String deptId = managementSysuser.getDeptId();
            ManagementDept dept = deptMapper.selectById(deptId);
            if (healthQueryParam.getPageNo() != null && healthQueryParam.getSize() != null) {
                PageHelper.startPage(healthQueryParam.getPageNo(), healthQueryParam.getSize());
            }
            List<HealthSummary> list = mapper.selectList(new LambdaQueryWrapper<HealthSummary>().eq(StrUtil.isNotBlank(healthQueryParam.getOpenId()), HealthSummary::getOpenId, healthQueryParam.getOpenId())
                    .like(StrUtil.isNotBlank(healthQueryParam.getIdCard()), HealthSummary::getIdCard, healthQueryParam.getIdCard())
                    .like(StrUtil.isNotBlank(healthQueryParam.getPhone()), HealthSummary::getPhone, healthQueryParam.getPhone())
                    .like(StrUtil.isNotBlank(healthQueryParam.getPeopleName()), HealthSummary::getPeopleName, healthQueryParam.getPeopleName())
                    .like(StrUtil.isNotBlank(healthQueryParam.getMainContractor()), HealthSummary::getMainContractor, healthQueryParam.getMainContractor())
                    .eq(healthQueryParam.getProfileAuditing() != null, HealthSummary::getProfileAuditing, healthQueryParam.getProfileAuditing())
                    .eq(healthQueryParam.getHealthAuditing() != null, HealthSummary::getHealthAuditing, healthQueryParam.getHealthAuditing())
                    .eq(!"-1".equals(dept.getPId()), HealthSummary::getMainContractor, dept.getId())
                    .ge(healthQueryParam.getInTimeStart() != null, HealthSummary::getBhtTime, healthQueryParam.getInTimeStart())
                    .le(healthQueryParam.getInTimeEnd() != null, HealthSummary::getBhtTime, healthQueryParam.getInTimeEnd())
                    .ge(healthQueryParam.getOutTimeStart() != null, HealthSummary::getOutTime, healthQueryParam.getOutTimeStart())
                    .le(healthQueryParam.getOutTimeEnd() != null, HealthSummary::getOutTime, healthQueryParam.getOutTimeEnd())
                    .eq(HealthSummary::getDeleted, 0)
                    .orderByDesc(HealthSummary::getInsertDate));
    
            list.forEach(e -> {
                // 部门
                ManagementDept managementDept = deptMapper.selectById(e.getMainContractor());
                e.setMainContractorCN(managementDept.getDName());
                e.setProfileAuditingCN(e.getProfileAuditing() == 0 ? "审核中" : (e.getProfileAuditing() == 1 ? "审核已通过" : "驳回"));
                e.setHealthAuditingCN(e.getHealthAuditing() == 0 ? "审核中" : (e.getHealthAuditing() == 1 ? "审核已通过" : "驳回"));
            });
    
            List<String> tableHead = Arrays.asList("序号", "单位", "部门/分包单位", "姓名", "性别", "年龄", "身份证号码", "返岗前住址", "联系电话", "返岗前核酸检测时间", "返岗前核酸检测结果",
                    "返岗前健康码状态", "返岗前体温", "返岗时间", "返岗乘坐交通工具", "交通工具时间班次车牌号", "到达白鹤滩工地时间", "白鹤滩工地居住地", "到达后核酸检测时间", "到达后核酸检测结果", "到达后健康码状态",
                    "到达后体温", "是否乘坐非正规交通工具", "是否独自返乡,同行人员姓名", "同行人员住址", "同行人员联系电话", "是否有发热、咳嗽", "公司责任人", "项目责任人", "劳务责任人", "备注",
                    "员工个人信息审核状态","员工返岗信息审核状态");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            List<LinkedList<String>> tableBody = new LinkedList<>();
            for (int i = 0; i < list.size(); i++) {
                LinkedList<String> linkedList = new LinkedList<>();
                linkedList.add(String.valueOf(i+1));
                linkedList.add(list.get(i).getMainContractorCN());
                linkedList.add(list.get(i).getSubContractor());
                linkedList.add(list.get(i).getPeopleName());
                linkedList.add(list.get(i).getSex() == 0 ? "男" : "女");
                linkedList.add(String.valueOf(list.get(i).getAge()));
                linkedList.add(list.get(i).getIdCard());
                linkedList.add(list.get(i).getReturnAddress());
                linkedList.add(list.get(i).getPhone());
                linkedList.add(list.get(i).getReturnCheckTime() != null ? format.format(list.get(i).getReturnCheckTime()) : "");
                linkedList.add(list.get(i).getReturnCheckResult());
                linkedList.add(list.get(i).getReturnHealthCode());
                linkedList.add(list.get(i).getReturnBodyTemperature());
                linkedList.add(list.get(i).getReturnTime() != null ? format.format(list.get(i).getReturnTime()) : "");
                linkedList.add(list.get(i).getReturnTransportation());
                linkedList.add(list.get(i).getReturnTransportationNo());
                linkedList.add(list.get(i).getBhtTime() != null ? format.format(list.get(i).getBhtTime()) : "");
                linkedList.add(list.get(i).getBhtAddress());
                linkedList.add(list.get(i).getBhtCheckTime() != null ? format.format(list.get(i).getBhtCheckTime()) : "");
                linkedList.add(list.get(i).getBhtCheckResult());
                linkedList.add(list.get(i).getHealthCode());
                linkedList.add(list.get(i).getBodyTemperature());
                linkedList.add(list.get(i).getInformalTransportation());
                linkedList.add("是");
                linkedList.add("无");
                linkedList.add("无");
                linkedList.add(list.get(i).getFever() == 0 ? "否" : "是");
                linkedList.add(list.get(i).getCompanyOwner());
                linkedList.add(list.get(i).getProjectOwner());
                linkedList.add(list.get(i).getServiceOwner());
                linkedList.add(list.get(i).getRemark());
                linkedList.add(list.get(i).getProfileAuditingCN());
                linkedList.add(list.get(i).getHealthAuditingCN());
                tableBody.add(linkedList);
            }
            try {
                ExportExcelUtil.downloadExcel("员工返岗健康信息", tableHead, tableBody, response);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    效果

     

    第二种方式

    		// 设置自动列宽
    		for (int i = 0; i < headers.length; i++) {
    			sheet.autoSizeColumn(i);
    			sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 2);
    		}

    展开全文
  • Java 设置Excel自适应行高、列宽

    千次阅读 2020-02-11 11:17:02
    excel中,可通过设置自适应行高或列宽自动排版,是一种比较常用的快速调整表格整体布局的方法。设置自适应时,可考虑2种情况: 1.固定数据,设置行高、列宽自适应数据(常见的设置自适应方法) 2.固定列宽,...
  • Excel单元格没有值的时候,row.getCell()方法获取不到单元格,因此这时要用row.createCell()方法! Row row = sheet.getRow(r); for(int c = 0; c <= 27; c++ ){ //单元格没有值(等于null)时,getCell方法...
  • Excel中,单元格宽度其实就是列的宽度,因为Excel假设这一列的单元格宽度肯定一致。 所以要设置单元格宽度,我们就得从列的宽度下手,HSSFSheet有个方法叫SetColumnWidth,共有两个参数:一个是列的索引(从...
  • 最近在网上学习了java POI excel导出 整了一个例子,代码也简单,创建行、列、设置宽度高度、合并列 下面贴出我滴代码: public class Total{ private Integer payWay; private Float amount; private String...
  • java设置Excel单元格格式 POI

    万次阅读 2012-04-23 17:58:54
    POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFCellStyle setBorder = wb.createCellStyle(); ...
  • java操作修饰Excel字体大小单元格背景色合并单元格设置列宽
  • java使用jxl导出excel单元格自适应

    千次阅读 2017-05-17 10:17:51
    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import jxl.CellView; import jxl.Workbook; import j
  • java用POI设置Excel的列宽

    万次阅读 多人点赞 2016-05-24 16:24:41
    需求:将某个excel中的某一列列宽设置为35(该数值是Excel中显示的列宽值)。 poi中设置列宽的方法为:HSSFSheet.setColumnWidth(int columnIndex, int width);第一个参数好理解–列序号,关键是第二个参数宽度的值...
  • //合并单元格 sheet.addMergedRegion(new CellRangeAddress(0,0,2,6));//起始行,结束行,起始列,结束列 // 设置 列宽 1.第几列 2.尺寸 sheet.setColumnWidth((short) (7), (short) (30*200));
  • 注意:此示例采用poi-3.17版本,其他版本api可能略有不同 poi.jar 地址:... import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.Fi...
  • 引言 技术好就一定能写出优质的代码吗?不能,对于做开发的人来说,学到的技术知识是理论性的,只有把知识代入到真实的实战案例中才能快速将理论转变为技能。 一直在网上看到过很多关于类似的资料,要么就是版本比较...
  • 配置宽度自适应3.Excel导出原理 前言 一、Hutool是什么? Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的...
  • //第一个参数代表列id(从0开始),第2个参数代表宽度值 参考 :"2012-08-10"的宽度为2500 六、设置自动换行: cellStyle.setWrapText(true);//设置自动换行 4、在创建一个空的Sheet页,如果要创建多个分页,遍历添加...
  • 以下是Excel导出时常用的单元格设置,其中的HSSFCellStyle等可以用接口CellStyle替代(多态)。以下内容均从网上参考: 第一种:日期格式 cell.setCellValue(new Date(2008,5,5)); //set date format ...
  • POI HSSFCellStyle 设置 Excel 单元格样式

    万次阅读 2017-08-28 11:05:54
    POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFCellStyle setBorder = wb....
  • HSSFSheet sheet = workbook.createSheet("sheet1");//新建sheet页  ... //新建单元格样式  一、设置背景色: cellStyle.setFillForegroundColor((short) 13);// 设置背景
  • 一、设置背景色: cellStyle.setFillForegroundColor((short) 13);// 设置背景色 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 二、设置边框: cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);...
  • Excel表格边框的设置,对于制作一个漂亮的工作表,十分有用。由于审美的差异,我们通常做的表格都是以黑色边框白底为主,或者说,有些人根本不知道除了黑白表格还有带颜色的。如何设置表格边框属性呢,下面介绍一下...
  • // 将allAIItems写入excel,第一列为超链接(图片地址) try { // 定义输出流os,指向要生成的报告文件 OutputStream output = new FileOutputStream(file, true); // 创建生成EXEL文件的对象 XSSFWorkbook ...
  • //给EXCEL单元格第一行单独设置样式 //sheet.setDefaultColumnStyle(1,cellStyle1);//给表设置默认的列属性,数字1表示第二列,cellStyle1为样式 //第二行 HSSFRow row2 = sheet.createRow(1);//创建行元素对象,...
  • POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFCellStyle setBorder = wb.createCellStyle(); ...
  • POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 2)); 自适应列宽度: sheet.autoSizeColumn(1);  ...
  • 1、poi导出Excel 2、合并单元,根据自己业务进行处理 3、设置自动列宽 ExportExcelUtils import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,845
精华内容 2,338
关键字:

java设置excel单元格宽度

java 订阅