• 转:Java修改Excel单元格的数据及格式


    https://blog.csdn.net/aking21alinjuju/article/details/6001153?locationNum=2

    继前两节的Java读取、写入Excel后,本期将推出Java修改Excel中数据以及格式的方法和技巧,如果大家学习了前面的读、写Excel,相信学习本节内容将是不费吹灰之力啊,不过要灵活的运用还需多加努力呀。

          好了,为了展示Java修改Excel的魅力,我们先来设计一个业务场景,这个场景是根据最近做过的一件事设计出来的:

          在一张Excel中,有一批学生信息数据如下图:

     图1   Excel中的示例数据

          在创建Excel时,将Excel中的所在省,所在市做成了下拉菜单以供选择,设置如下:

                                

                       图2    所在省一览                               图3     所在市一览

          从图1我们会发现一个问题,王五的填写所在省为:四川省,而所在市为:石家庄,大家都石家庄是河北的省会,所以王五的这种情况属于Excel中的错误数据,那么下面我们来做一件事:将Excel中所有出现省市关系弄错了的,在Excel中进行标注出来!!

    代码如下:

    package jxl.zhanhj;
    
    import java.io.*;
    import java.util.HashMap;
    
    import jxl.*;
    import jxl.format.Alignment;
    import jxl.format.Border;
    import jxl.format.BorderLineStyle;
    import jxl.format.Colour;
    import jxl.format.VerticalAlignment;
    import jxl.write.Label;
    import jxl.write.WritableCellFormat;
    import jxl.write.WritableFont;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    
    public class UpdateExcel {
        public static void main(String args[]) {
            WritableWorkbook book = null;
            HashMap<String, String> map = new HashMap<String, String>();
            map = getPCKV();
            try {
                // Excel获得文件
                Workbook wb = Workbook.getWorkbook(new File("update_test.xls"));
                // 打开一个文件的副本,并且指定数据写回到原文件
                book = Workbook.createWorkbook(new File("update_test.xls"), wb);
                Sheet sheet = book.getSheet(0);
                WritableSheet wsheet = book.getSheet(0);
                int colunms = sheet.getColumns();
                // 不读表头
                for (int i = 1; i < sheet.getRows(); i++) {
                    StringBuffer pcin = new StringBuffer();
                    // 将省市组合起来与HashMap进行匹配
                    String province = sheet.getCell(4, i).getContents().trim();
                    String city = sheet.getCell(5, i).getContents().trim();
                    pcin = pcin.append(province).append("-").append(city);
                    // 如果不匹配,则在该行的最后加入标注信息
                    if (!map.containsValue(pcin.toString())) {
                        Label label = new Label(colunms, i, "省市选择出错",
                                getDataCellFormat());
                        wsheet.addCell(label);
                    }
                }
                book.write();
            } catch (Exception e) {
                System.out.println(e);
            } finally {
                try {
                    book.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        // 设置标注的格式为黄底红字
        public static WritableCellFormat getDataCellFormat() {
            WritableCellFormat wcf = null;
            try {
                WritableFont wf = new WritableFont(WritableFont.TIMES, 10,
                        WritableFont.BOLD, false);
                // 字体颜色
                wf.setColour(Colour.RED);
                wcf = new WritableCellFormat(wf);
                // 对齐方式
                wcf.setAlignment(Alignment.CENTRE);
                wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
                // 设置上边框
                wcf.setBorder(Border.TOP, BorderLineStyle.THIN);
                // 设置下边框
                wcf.setBorder(Border.BOTTOM, BorderLineStyle.THIN);
                // 设置左边框
                wcf.setBorder(Border.LEFT, BorderLineStyle.THIN);
                // 设置右边框
                wcf.setBorder(Border.RIGHT, BorderLineStyle.THIN);
                // 设置背景色
                wcf.setBackground(Colour.YELLOW);
                // 自动换行
                wcf.setWrap(true);
            } catch (WriteException e) {
                e.printStackTrace();
            }
            return wcf;
        }
    
        // 省市对应关系Map
        public static HashMap<String, String> getPCKV() {
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("01", "河北省-石家庄");
            map.put("02", "河北省-秦皇岛");
            map.put("03", "河北省-唐山");
            map.put("04", "四川省-成都");
            map.put("05", "四川省-绵阳");
            map.put("06", "四川省-达州");
            map.put("07", "广西省-桂林");
            map.put("08", "广西省-南宁");
            map.put("09", "广西省-柳州");
            return map;
        }
    }

    代码执行结果如图所示:

    图4      执行结果

         

          到这里,Java修改Excel单元格的数据及格式便告一段落了,本节给出了一个较为简单的场景进行了讲述,目的在于引导大家学习Java修改Excel的常用流程和方法,若读者能将Java操作Excel学得更深,往往可以发挥更大的作用。比如程序中利用HashMap来存储对应关系,如果要将全国的省市纳入进来,利用HashMap不是很好的做好,我们可以改成通过利用数据库来达到同样的效果,这里的改进留给读者。

         

          读到这里,可能有部分读者会产生疑问,这种操作,直接在Excel中,我们不是也可以操作吗?为什么通过Java来修改,是不是多此一举了?其实不然,如果读者将Java读写文件结合起来,以及在将此程序稍微扩展一下,对每个Excel的所有页签进行遍历,那么Java程序处理的数据里和复杂度,远远不是单纯的Excel能企及的。举个简单的场景(仅仅将上述场景进行扩展):

          如果一个学院要统计该学院所有学生的信息【格式和图1一样】,每个级发一个Excel,每个级不同专业的学生放在不同的页签中(sheet),如Excel样式下图所示:

    图5      09级学生信息统计表

    图6      10级学生信息统计表

          最终,学院要根据收集上来的学生信息导入到数据库中,如果你是那个负责导入数据的人,你便通过Java读写Excel功能将所有的数据转化成SQL语句,同时可以判断出哪些同学信息填写错误,是不是这种应用变得更有意义了?

          其实学习程序往往就是这样,掌握了各个知识点后要懂得把学过的只是串联起来,连点成线,这样在能更好的解决问题,希望本节的内容对大家有帮助,下期再见!

  • 相关阅读:
    WCF自定义消息编码器 part 2 from MSDN
    EYQiPa,梦开始的地方
    WCF负载平衡 from MSDN
    WCF安全体系结构 from MSDN
    Introduction to Locking in SQL Server z
    WCF 性能计数器 from MSDN
    关于EYQiPa 持续更新
    12 个免费在线的 Web 网站性能测试工具 转
    使用FileSystemWatcher监控目录 z
    IIS相关
  • 原文地址:https://www.cnblogs.com/techfans/p/9361239.html
Copyright © 2020-2023  润新知