java中excel的属性设置

参考网址:http://blog.sina.com.cn/s/blog_510f2b100100bv1x.html

public void grxxExportXLS(HttpServletResponse response, Grxxgrxx,
 

  PageBean p) {
   List list =queryGrxxList(grxx, p);
   try {
   // String targetfile =getServlet().getServletContext().getRealPath(
   // "/companymanage")
   // + "/grxxlistxls.xls";
   // Method 1:创建可写入的Excel工作薄
   // jxl.write.WritableWorkbook wwb =Workbook.createWorkbook(new
   // File(
   // targetfile));
   // Method 2:将WritableWorkbook直接写入到输出流
   OutputStream os = response.getOutputStream();
   String fs = "个人信息表";
   fs = new String(fs.getBytes("gb2312"), "iso8859-1");
   response.reset();// 清空输出流
   response.setContentType("application/msexcel");// 定义输出类型
   response.setHeader("Content-disposition", "attachment;filename="
     + fs + ".xls");// 设定输出文件头
   jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);

   // 创建Excel工作表
   jxl.write.WritableSheet ws = wwb.createSheet("个人信息表1", 0);
   
   int charTitle = 10;// 标题字体大小
   int charNormal = 10;// 标题字体大小
   // 添加带有字型Formatting的对象

   // 用于标题
   jxl.write.WritableFont titleFont = newjxl.write.WritableFont(
     WritableFont.createFont("宋体"), charTitle, WritableFont.BOLD);

   jxl.write.WritableCellFormat titleFormat = newjxl.write.WritableCellFormat(
     titleFont);
   titleFormat.setBorder(Border.ALL, BorderLineStyle.THIN); //线条
   titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直对齐
   titleFormat.setAlignment(Alignment.CENTRE); // 水平对齐
   titleFormat.setWrap(true); // 是否换行
   titleFormat.setBackground(Colour.GRAY_25);// 背景色暗灰-25%
   // 用于正文
   WritableFont normalFont = new WritableFont(WritableFont
     .createFont("宋体"), charNormal);
   jxl.write.WritableCellFormat normalFormat = newjxl.write.WritableCellFormat(
     normalFont);
   normalFormat.setBorder(Border.ALL, BorderLineStyle.THIN); //线条
   normalFormat.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直对齐
   normalFormat.setAlignment(Alignment.CENTRE);// 水平对齐
   normalFormat.setWrap(true); // 是否换行

   // 用于带有formatting的Number对象
   WritableFont nf = new WritableFont(WritableFont
     .createFont("Times New Roman"), charNormal);
   // jxl.write.NumberFormat nf = newjxl.write.NumberFormat("#.##");
   jxl.write.WritableCellFormat wcfN = newjxl.write.WritableCellFormat(
     nf);
   wcfN.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
   wcfN.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
   wcfN.setAlignment(Alignment.CENTRE);// 水平对齐
   wcfN.setWrap(true); // 是否换行
   
   // 第一行
   
   ws.mergeCells(14, 0, 18, 0); // 合并单元格,
   ws.mergeCells(10, 0, 13, 0); // 合并单元格,

   ws.mergeCells(0, 0, 0, 1); // 合并单元格,序号
   ws.setColumnView(0, 6); // 设置列宽,第1列
   ws.mergeCells(1, 0, 1, 1); // 合并单元格,公民身份证号
   ws.setColumnView(1, 9); // 设置列宽,第2列
   ws.mergeCells(2, 0, 2, 1); // 合并单元格,电脑序号
   ws.setColumnView(2, 6); // 设置列宽,第3列
   ws.mergeCells(3, 0, 3, 1); // 合并单元格,四险姓名
   ws.setColumnView(3, 6); // 设置列宽,第4列
   ws.mergeCells(4, 0, 4, 1); // 合并单元格,医疗姓名
   ws.setColumnView(4, 6); // 设置列宽,第5列
   ws.mergeCells(5, 0, 5, 1); // 合并单元格,医疗保险手册号
   ws.setColumnView(5, 9); // 设置列宽,第6列
   ws.mergeCells(6, 0, 6, 1); // 合并单元格,四险缴费人员类别
   ws.setColumnView(6, 9); // 设置列宽,第7列
   ws.mergeCells(7, 0, 7, 1); // 合并单元格,医疗缴费人员类别
   ws.setColumnView(7, 9); // 设置列宽,第8列
   ws.mergeCells(8, 0, 8, 1); // 合并单元格,医疗参保人员类别
   ws.setColumnView(8, 9); // 设置列宽,第9列
   ws.mergeCells(9, 0, 9, 1); // 合并单元格,医疗参保状态
   ws.setColumnView(9, 7); // 设置列宽,第10列
   ws.setColumnView(10, 6); // 设置列宽,第11列
   ws.setColumnView(11, 6); // 设置列宽,第12列
   ws.setColumnView(12, 6); // 设置列宽,第13列
   ws.setColumnView(13, 6); // 设置列宽,第14列
   ws.setColumnView(14, 6); // 设置列宽,第15列
   ws.setColumnView(15, 6); // 设置列宽,第16列
   ws.setColumnView(16, 6); // 设置列宽,第17列
   ws.setColumnView(17, 6); // 设置列宽,第18列
   ws.setColumnView(18, 6); // 设置列宽,第19列
   jxl.write.Label tit00 = new jxl.write.Label(0, 0, "序号",titleFormat);
   ws.addCell(tit00);
   jxl.write.Label tit10 = new jxl.write.Label(1, 0, "公民身份证号",
     titleFormat);
   ws.addCell(tit10);
   jxl.write.Label tit20 = new jxl.write.Label(2, 0, "电脑序号",
     titleFormat);
   ws.addCell(tit20);
   jxl.write.Label tit30 = new jxl.write.Label(3, 0, "四险姓名",
     titleFormat);
   ws.addCell(tit30);
   jxl.write.Label tit40 = new jxl.write.Label(4, 0, "医疗姓名",
     titleFormat);
   ws.addCell(tit40);
   jxl.write.Label tit50 = new jxl.write.Label(5, 0, "医疗保险手册号",
     titleFormat);
   ws.addCell(tit50);
   jxl.write.Label tit60 = new jxl.write.Label(6, 0, "四险缴费人员类别",
     titleFormat);
   ws.addCell(tit60);
   jxl.write.Label tit70 = new jxl.write.Label(7, 0, "医疗缴费人员类别",
     titleFormat);
   ws.addCell(tit70);
   jxl.write.Label tit80 = new jxl.write.Label(8, 0, "医疗参保人员类别",
     titleFormat);
   ws.addCell(tit80);
   jxl.write.Label tit90 = new jxl.write.Label(9, 0, "医疗参保状态",
     titleFormat);
   ws.addCell(tit90);
   jxl.write.Label tit100 = new jxl.write.Label(10, 0, "四险缴费状态",
     titleFormat);
   ws.addCell(tit100);
   jxl.write.Label tit140 = new jxl.write.Label(14, 0, "缴费基数",
     titleFormat);
   ws.addCell(tit140);
   // 第二行
   jxl.write.Label tit101 = new jxl.write.Label(10, 1, "养老",
     titleFormat);
   ws.addCell(tit101);
   jxl.write.Label tit111 = new jxl.write.Label(11, 1, "失业",
     titleFormat);
   ws.addCell(tit111);
   jxl.write.Label tit121 = new jxl.write.Label(12, 1, "工伤",
     titleFormat);
   ws.addCell(tit121);
   jxl.write.Label tit131 = new jxl.write.Label(13, 1, "生育",
     titleFormat);
   ws.addCell(tit131);
   jxl.write.Label tit141 = new jxl.write.Label(14, 1, "养老",
     titleFormat);
   ws.addCell(tit141);
   jxl.write.Label tit151 = new jxl.write.Label(15, 1, "失业",
     titleFormat);
   ws.addCell(tit151);
   jxl.write.Label tit161 = new jxl.write.Label(16, 1, "工伤",
     titleFormat);
   ws.addCell(tit161);
   jxl.write.Label tit171 = new jxl.write.Label(17, 1, "生育",
     titleFormat);
   ws.addCell(tit171);
   jxl.write.Label tit181 = new jxl.write.Label(18, 1, "医疗",
     titleFormat);
   ws.addCell(tit181);

   double yljs = 0;// 医疗基数合计
   double yxjs = 0;// 养老基数合计
   double syjs = 0;// 失业基数合计
   double sxjs = 0;// 生育基数合计
   double gsjs = 0;// 工伤基数合计
   for (int i = 0; i < list.size(); i++) {
    Grxx xx = (Grxx) list.get(i);
    jxl.write.Label lab1 = new jxl.write.Label(0, i + 2, String
      .valueOf(i + 1), wcfN);
    ws.addCell(lab1);// 第1列:序号
    jxl.write.Label lab2 = new jxl.write.Label(1, i + 2, xx
      .getBzhm(), wcfN);
    ws.addCell(lab2);// 第2列:公民身份证号
    jxl.write.Label lab3 = new jxl.write.Label(2, i + 2, "字段不存在",
      wcfN);
    ws.addCell(lab3);// 第3列:电脑序号
    jxl.write.Label lab4 = new jxl.write.Label(3, i + 2,
      xx.getXm(), normalFormat);
    ws.addCell(lab4);// 第4列:四险姓名
    jxl.write.Label lab5 = new jxl.write.Label(4, i + 2,
      xx.getXm(), normalFormat);
    ws.addCell(lab5);// 第5列:医疗姓名
    jxl.write.Label lab6 = new jxl.write.Label(5, i + 2, xx
      .getBxh(), wcfN);
    ws.addCell(lab6);// 第6列:医疗保险手册号
    jxl.write.Label lab7 = new jxl.write.Label(6, i + 2, xx
      .getBxh(), normalFormat);
    ws.addCell(lab7);// 第7列:四险缴费人员类别
    jxl.write.Label lab8 = new jxl.write.Label(7, i + 2, "字段不存在",
      normalFormat);
    ws.addCell(lab8);// 第8列:医疗缴费人员类别
    jxl.write.Label lab9 = new jxl.write.Label(8, i + 2, "字段不存在",
      normalFormat);
    ws.addCell(lab9);// 第9列:医疗参保人员类别
    jxl.write.Label lab10 = new jxl.write.Label(9, i + 2,"字段不存在",
      normalFormat);
    ws.addCell(lab10);// 第10列:医疗参保状态
    jxl.write.Label lab11 = new jxl.write.Label(10, i + 2,"字段不存在",
      normalFormat);
    ws.addCell(lab11);// 第11列:养老缴费状态
    jxl.write.Label lab12 = new jxl.write.Label(11, i + 2,"字段不存在",
      normalFormat);
    ws.addCell(lab12);// 第12列:失业缴费状态
    jxl.write.Label lab13 = new jxl.write.Label(12, i + 2,"字段不存在",
      normalFormat);
    ws.addCell(lab13);// 第13列:工伤缴费状态
    jxl.write.Label lab14 = new jxl.write.Label(13, i + 2,"字段不存在",
      normalFormat);
    ws.addCell(lab14);// 第14列:生育缴费状态
    jxl.write.Number lab15 = new jxl.write.Number(14, i + 2, xx
      .getGrjs().getYxjfjs().doubleValue(), wcfN);
    ws.addCell(lab15);// 第15列:养老缴费基数
    yxjs += xx.getGrjs().getYxjfjs().doubleValue();
    jxl.write.Number lab16 = new jxl.write.Number(15, i + 2, xx
      .getGrjs().getSyjfjs().doubleValue(), wcfN);
    ws.addCell(lab16);// 第16列:失业缴费基数
    syjs += xx.getGrjs().getSyjfjs().doubleValue();
    jxl.write.Number lab17 = new jxl.write.Number(16, i + 2, xx
      .getGrjs().getGsjfjs().doubleValue(), wcfN);
    ws.addCell(lab17);// 第17列:工伤缴费基数
    gsjs += xx.getGrjs().getGsjfjs().doubleValue();
    jxl.write.Number lab18 = new jxl.write.Number(17, i + 2, xx
      .getGrjs().getSxjfjs().doubleValue(), wcfN);
    ws.addCell(lab18);// 第18列:生育缴费基数
    sxjs += xx.getGrjs().getSxjfjs().doubleValue();
    jxl.write.Number lab19 = new jxl.write.Number(18, i + 2, xx
      .getGrjs().getYljfjs().doubleValue(), wcfN);
    ws.addCell(lab19);// 第19列:医疗缴费基数
    yljs += xx.getGrjs().getYljfjs().doubleValue();
   }
   
   int end = list.size() + 2;
   jxl.write.Label end0 = new jxl.write.Label(0, end, "合计",
     normalFormat);
   ws.addCell(end0);
   jxl.write.Label end1 = new jxl.write.Label(1, end, "--",
     normalFormat);
   ws.addCell(end1);
   jxl.write.Label end2 = new jxl.write.Label(2, end, "--",
     normalFormat);
   ws.addCell(end2);
   jxl.write.Label end3 = new jxl.write.Label(3, end, "--",
     normalFormat);
   ws.addCell(end3);
   jxl.write.Label end4 = new jxl.write.Label(4, end, "--",
     normalFormat);
   ws.addCell(end4);
   jxl.write.Label end5 = new jxl.write.Label(5, end, "--",
     normalFormat);
   ws.addCell(end5);
   jxl.write.Label end6 = new jxl.write.Label(6, end, "--",
     normalFormat);
   ws.addCell(end6);
   jxl.write.Label end7 = new jxl.write.Label(7, end, "--",
     normalFormat);
   ws.addCell(end7);
   jxl.write.Label end8 = new jxl.write.Label(8, end, "--",
     normalFormat);
   ws.addCell(end8);
   jxl.write.Label end9 = new jxl.write.Label(9, end, "--",
     normalFormat);
   ws.addCell(end9);
   jxl.write.Label end10 = new jxl.write.Label(10, end, "--",
     normalFormat);
   ws.addCell(end10);
   jxl.write.Label end11 = new jxl.write.Label(11, end, "--",
     normalFormat);
   ws.addCell(end11);
   jxl.write.Label end12 = new jxl.write.Label(12, end, "--",
     normalFormat);
   ws.addCell(end12);
   jxl.write.Label end13 = new jxl.write.Label(13, end, "--",
     normalFormat);
   ws.addCell(end13);
   // 养老
   jxl.write.Number end14 = new jxl.write.Number(14, end, yxjs,wcfN);
   ws.addCell(end14);
   // 失业
   jxl.write.Number end15 = new jxl.write.Number(15, end, syjs,wcfN);
   ws.addCell(end15);
   // 工伤
   jxl.write.Number end16 = new jxl.write.Number(16, end, gsjs,wcfN);
   ws.addCell(end16);
   // 生育
   jxl.write.Number end17 = new jxl.write.Number(17, end, sxjs,wcfN);
   ws.addCell(end17);
   // 医疗
   jxl.write.Number end18 = new jxl.write.Number(18, end, yljs,wcfN);
   ws.addCell(end18);
   // 写入Exel工作表
   wwb.write();
   // 关闭Excel工作薄对象
   wwb.close();
   os.close();
   } catch(Exception e) {
   e.printStackTrace();
   }
}


<think>嗯,用户想在Java设置Excel文件的边距,我得先想想有哪些方法或者库可以实现这个功能。记得之前处理过类似的Excel操作,可能用ApachePOI或者一些第三方库。不过用户提到的引用里提到了FreeSpire.XLS,这也是一个可能的选项。首先,ApachePOI是常用的Java库,支持Excel操作。不过根据引用[1]中的代码,用户可能尝试过使用POI的CellStyle设置边距,但好像不太对,因为CellStyle的setPadding其实是设置单元格的内边距,而不是页面边距。这可能是个误区,需要澄清。然后,用户提到的引用[2]提到了FreeSpire.XLSforJava,这个库可能专门处理页面设置,包括页边距。可能需要检查这个库的文档,看看是否有相关的方法。比如设置页面的上下左右边距,调整页面方向、大小等。接下来,要分步骤回答用户的问题。首先,明确两种方法:使用ApachePOI和第三方库如Spire.XLS。然后,分别给出示例代码,说明如何设置页边距。需要注意的是,POI可能只能通过打印设置来调整页边距,而Spire库可能有更直接的API。另外,用户可能混淆了单元格内边距和页面边距,需要指出两者的区别。比如,CellStyle的setPadding是单元格内部内容的边距,而页面边距是整个打印页面的边距,属于页面设置的一部分。所以,在POI中应该通过PrintSetup或者PageMargins来处理。还要检查代码示例是否正确。比如,在POI中,可能需要使用sheet.getPrintSetup().setLeftMargin()等方法,或者通过sheet.setMargin()来设置。而Spire库可能有类似PageSetup类,直接设置LeftMargin、TopMargin等属性。 最后,需要提醒用户注意不同库的优缺点,比如POI是开源但功能可能有限,而Spire可能需要付费或者免费版有功能限制。同时,生成相关问题,帮助用户进一步了解如何调整页面方向、设置打印区域等扩展功能。</think>在Java设置Excel页边距可通过以下两种主流方法实现: ### 一、使用Apache POI库 1. **创建页面设置对象** ```java Sheet sheet = workbook.createSheet(); PrintSetup printSetup = sheet.getPrintSetup(); // 设置页面方向(PORTRAIT=纵向,LANDSCAPE=横向) printSetup.setOrientation(PageOrientation.LANDSCAPE); ``` 2. **设置页边距(单位:英寸)** ```java // 设置左/右边距 sheet.setMargin(Sheet.LeftMargin, 0.5); // 左边距0.5英寸 sheet.setMargin(Sheet.RightMargin, 0.5); // 右边距0.5英寸 // 设置上/下边距 sheet.setMargin(Sheet.TopMargin, 1.0); // 上边距1英寸 sheet.setMargin(Sheet.BottomMargin, 1.0);// 下边距1英寸 ``` 3. **完整示例** ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelMarginDemo { public static void main(String[] args) throws Exception { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Data"); // 设置页边距 sheet.setMargin(Sheet.LeftMargin, 0.5); sheet.setMargin(Sheet.RightMargin, 0.5); sheet.setMargin(Sheet.TopMargin, 1.0); sheet.setMargin(Sheet.BottomMargin, 1.0); // 写入文件 try (FileOutputStream out = new FileOutputStream("output.xlsx")) { workbook.write(out); } } } ``` ### 二、使用Spire.XLS库 1. **配置页面设置** ```java import com.spire.xls.*; public class SpireMarginDemo { public static void main(String[] args) { Workbook workbook = new Workbook(); Worksheet sheet = workbook.getWorksheets().get(0); // 获取页面设置对象 PageSetup pageSetup = sheet.getPageSetup(); // 设置边距(单位:厘米) pageSetup.setLeftMargin(2.5); pageSetup.setRightMargin(2.5); pageSetup.setTopMargin(3.0); pageSetup.setBottomMargin(3.0); // 保存文件 workbook.saveToFile("spire_output.xlsx", FileFormat.Version2016); } } ``` ### 关键区别说明 | 特性 | Apache POI | Spire.XLS | |--------------------|--------------------------|-------------------------| | 授权协议 | Apache License 2.0 | 免费版有功能限制[^2] | | 边距单位 | 英寸 | 厘米 | | 单元格内边距控制 | 通过CellStyle设置 | 无直接API | | 打印缩放比例 | 支持 | 支持 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值