落花似雪 2013-12-27 01:10 采纳率: 0%
浏览 4635

java操作excel,用jxl将多个excel文件合并成一个多sheet的excel文件,颜色会出错

程序代码如下:

public class Main {

public static void main(String[] args) {
    try {
        InputStream fis1 = new FileInputStream("D:/fei/testfiles/2G囤卡量.xls");
        InputStream fis2 = new FileInputStream("D:/fei/testfiles/电子渠道.xls");
        Workbook wb1 = Workbook.getWorkbook(fis1);
        Workbook wb2 = Workbook.getWorkbook(fis2);
        WritableWorkbook newWb = Workbook.createWorkbook(new File("D:/fei/testfile/jxl.xls"));
        newWb.importSheet("NewSheet0", 0, wb1.getSheet(0));
        newWb.importSheet("NewSheet1", 1, wb2.getSheet(0));
        fis1.close();
        fis2.close();
        wb1.close();
        wb2.close();
        newWb.write();
        newWb.close();
    } catch (BiffException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (WriteException e) {
        e.printStackTrace();
    }
}

}

合并使用的excel源文件是用杰表报表工具生成的报表。合并之后的excel文件,数据、单元格合并、边框等都与源文件相符,但是颜色会出现异常,一些单元格会加上蓝色的背景色。
我自己也新建了几个excel文件来测试,颜色不会出现异常。我不知道是office版本的问题,还是excel文件本身有什么属性是我不知道的。
以上所有的excel文件都是97-03版的xls文件。
请赐教。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-21 03:59
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以看下这个问题的回答https://ask.csdn.net/questions/743079
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Java使用jxl实现导出多sheet页Excel表格功能
    • 除此之外, 这篇博客: Java实现导入导出Excel文件的方法(poi,jxl)中的 xls: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      pom:

      <dependency>
      	<groupId>org.apache.poi</groupId>
      	<artifactId>poi-ooxml</artifactId>
      	<version>3.9</version>
      </dependency>
      <dependency>
      	<groupId>commons-io</groupId>
      	<artifactId>commons-io</artifactId>
      	<version>2.2</version>
      </dependency>
      

      导出:

      public class PoiCreateExcel {
      
          public static void main(String[] args) {
              // 创建表头
              String[] title = {"id","name","sex"};
              //创建Excel工作薄
              HSSFWorkbook workbook = new HSSFWorkbook();
              //创建一个工作表sheet
              HSSFSheet sheet = workbook.createSheet();
              //创建第一行
              HSSFRow row = sheet.createRow(0);
              HSSFCell cell = null;
              // 插入第一行
              for (int i = 0; i < title.length; i++) {
                  cell = row.createCell(i);
                  cell.setCellValue(title[i]);
              }
              // 追加数据
              for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始
                  HSSFRow nexTrow = sheet.createRow(i);
                  HSSFCell cell2 = nexTrow.createCell(0);
                  cell2.setCellValue("a"+i);
                  cell2 = nexTrow.createCell(1);
                  cell2.setCellValue("user");
                  cell2 = nexTrow.createCell(2);
                  cell2.setCellValue("男");
              }
              // 创建一个文件
              File file = new File("d:/poi.xls");
              try {
                  file.createNewFile();
                  // 将内容存盘
                  FileOutputStream stream = FileUtils.openOutputStream(file);
                  workbook.write(stream);
      
                  stream.close();
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      

      导入:

      public class PoiReadExcel {
      
          public static void main(String[] args) {
      
              // 引入需要解析的文件
              File file = new File("d:/poi.xls");
              try {
                  // 创建Excel 读取文件内容
                  HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
                  /**
                   * 第一种方式读取Sheet页
                   */
      //            HSSFSheet sheet = workbook.getSheet("Sheet0");
                  /**
                   * 第二种方式读取Sheet页
                   */
                  HSSFSheet sheet = workbook.getSheetAt(0);
                  int firstRowNum = 0;// 起始行第0行
                  int lasrRowNum = sheet.getLastRowNum();// 一直读到最后一行
                  for (int i = 0; i < lasrRowNum; i++) {
                      HSSFRow row = sheet.getRow(i);
                      // 获取当前最后单元格列号
                      int lastCellNum = row.getLastCellNum();
                      for (int j = 0; j < lastCellNum; j++) {
                          HSSFCell cell = row.getCell(j);
                          String value = cell.getStringCellValue();// 注意! 如果Excel 里面的值是String 那么getStringCellValue 如果是其他类型 则需要修改
                          System.out.print(value + "  ");
                      }
                      System.out.println();
                  }
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘