<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
    http://www.javaresearch.org/article/45784.htm


    /**
    * <p>讀取Excel表格,拷貝、更新Excel工作薄 </p>
    * <p>Description: 可以讀取Excel文件的內容,更新Excel工作薄
    * </p>
    * <p>Copyright: Copyright (c) Corparation 2005</p>
    * <p>程序開發環境為eclipse</p>
    * @author Walker
    * @version 1.0
    */
    package cn.com.yitong.xls;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.Vector;

    import cn.com.yitong.ChartImg;
    import cn.com.yitong.VireObj;
    import cn.com.yitong.platform.log.YTLogger;

    import jxl.CellType;
    import jxl.Workbook;
    import jxl.format.CellFormat;
    import jxl.format.Colour;
    import jxl.format.UnderlineStyle;
    import jxl.write.Formula;
    import jxl.write.Label;
    import jxl.write.Number;
    import jxl.write.WritableCell;
    import jxl.write.WritableCellFormat;
    import jxl.write.WritableFont;
    import jxl.write.WritableImage;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    import jxl.write.biff.RowsExceededException;

    public class XLSDemo
    {
        private static final int TITLE_LENGTH = 7;
        private static final int SHEET_WIDTH = 32;
        private static final int SHEET_HEIGHT = 116;
        
        /**
         * 創建Excel
         */
        private void makeXls()
        {
            Workbook workbook = null;
            try
            {
                // 構建Workbook對象, 只讀Workbook對象
                // 直接從本地文件創建Workbook, 從輸入流創建Workbook
                InputStream ins = new FileInputStream("D:/Workspace/testproj/source.xls");
                workbook = Workbook.getWorkbook(ins);

                // 利用已經創建的Excel工作薄創建新的可寫入的Excel工作薄
                File outFile = new File("D:/Workspace/testproj/test.xls");
                WritableWorkbook wwb = Workbook.createWorkbook(outFile, workbook);
                // 讀取第一張工作表
                WritableSheet dataSheet = wwb.getSheet(0);
                //  設置凍結單元格
                dataSheet.getSettings().setVerticalFreeze(7);
                dataSheet.getSettings().setHorizontalFreeze(2);
                
                // 測試模擬數據
                Vector vecData = new Vector();
                for(int i = 0; i < 50; i ++)
                {
                    VireObj obj = new VireObj();
                    obj.setOrgNo("00" + i + "0");
                    obj.setOrgName("機構" + (i + 1));
                    obj.setOpenAcc((int)(100 * Math.random()));
                    obj.setDestoryAcc((int)(10 * Math.random()));
                    obj.setTotalAcc((int)(500 * Math.random()));
                    obj.setMonthInCount((int)(500 * Math.random()));
                    obj.setMonthInMoney(500 * Math.random());
                    obj.setMonthOutCount((int)(500 * Math.random()));
                    obj.setMonthOutMoney(500 * Math.random());
                    
                    vecData.add(obj);
                }            
                // 插入數據
                insertData(wwb, dataSheet, vecData);            
                // 插入模擬圖像數據
                Vector vecImg = new Vector();
                for(int i = 0; i < 3; i ++)
                {
                    ChartImg img = new ChartImg();
                    img.setImgTitle("圖像" + (i + 1));
                    img.setImgName("D:/Workspace/testproj/images/barchart.png");
                    vecImg.add(img);
                }
                // 插入圖表
                insertImgsheet(wwb, vecImg);
                //寫入Excel對象
                wwb.write();
                wwb.close();
            } catch (Exception e)
            {
                YTLogger.logDebug(e);
            } finally
            {
                // 操作完成時,關閉對象,釋放占用的內存空間
                workbook.close();
            }
        }
        
        /**
         * 插入數據
         * @param wwb WritableWorkbook : 工作簿
         * @param dataSheet WritableSheet : 工作表
         * @throws RowsExceededException
         * @throws WriteException
         */
        private void insertData(WritableWorkbook wwb, WritableSheet dataSheet, Vector vecData) throws RowsExceededException, WriteException
        {
            // 獲得標題單元格對象        
            modiStrCell(dataSheet, 2, 0, "工商銀行江蘇省分行 個人網上銀行業務種類/開銷戶明細報表(2005-12)", null);
            // 修改數據單元格數據
            for(int i = 0; i < vecData.size(); i ++)
            {
                VireObj obj = (VireObj)vecData.get(i);
                modiStrCell(dataSheet, 0, TITLE_LENGTH + i, obj.getOrgNo(), null);
                modiStrCell(dataSheet, 1, TITLE_LENGTH + i, obj.getOrgName(), null);
                modiNumCell(dataSheet, 2, TITLE_LENGTH + i, obj.getOpenAcc(), null);
                modiNumCell(dataSheet, 3, TITLE_LENGTH + i, obj.getDestoryAcc(), null);
                modiNumCell(dataSheet, 4, TITLE_LENGTH + i, obj.getTotalAcc(), null);
                modiNumCell(dataSheet, 5, TITLE_LENGTH + i, obj.getMonthInCount(), null);
                modiNumCell(dataSheet, 6, TITLE_LENGTH + i, obj.getTotalInMoney(), null);
                modiNumCell(dataSheet, 7, TITLE_LENGTH + i, obj.getMonthOutCount(), null);
                modiNumCell(dataSheet, 8, TITLE_LENGTH + i, obj.getMonthOutMoney(), null);
            }    
            // 刪除空行
            for (int j = vecData.size() + TITLE_LENGTH; j < SHEET_HEIGHT; j++)
            {
                dataSheet.removeRow(vecData.size() + TITLE_LENGTH);
            }        
            // 插入公式
            for(int i = 2; i < SHEET_WIDTH; i ++)
            {
                modiFormulaCell(dataSheet, i, vecData.size() + TITLE_LENGTH, 8, vecData.size() + TITLE_LENGTH, null);
            }        
        }

        /**
         * 修改字符單元格的值
         * @param dataSheet WritableSheet : 工作表
         * @param col int : 列
         * @param row int : 行
         * @param str String : 字符
         * @param format CellFormat : 單元格的樣式
         * @throws RowsExceededException
         * @throws WriteException
         */
        private void modiStrCell(WritableSheet dataSheet, int col, int row, String str, CellFormat format) throws RowsExceededException, WriteException
        {
            // 獲得單元格對象
            WritableCell cell = dataSheet.getWritableCell(col, row);
            // 判斷單元格的類型, 做出相應的轉化
            if (cell.getType() == CellType.EMPTY)
            {
                Label lbl = new Label(col, row, str);
                if(null != format)
                {
                    lbl.setCellFormat(format);
                } else
                {
                    lbl.setCellFormat(cell.getCellFormat());
                }
                dataSheet.addCell(lbl);
            } else if (cell.getType() == CellType.LABEL)
            {
                Label lbl = (Label)cell;
                lbl.setString(str);
            } else if (cell.getType() == CellType.NUMBER)
            {
                // 數字單元格修改
                Number n1 = (Number)cell;
                n1.setValue(42.05);
            }
        }
        
        /**
         * 修改數字單元格的值
         * @param dataSheet WritableSheet : 工作表
         * @param col int : 列
         * @param row int : 行
         * @param num double : 數值
         * @param format CellFormat : 單元格的樣式
         * @throws RowsExceededException
         * @throws WriteException
         */
        private void modiNumCell(WritableSheet dataSheet, int col, int row, double num, CellFormat format) throws RowsExceededException, WriteException
        {
            // 獲得單元格對象
            WritableCell cell = dataSheet.getWritableCell(col, row);
            // 判斷單元格的類型, 做出相應的轉化
            if (cell.getType() == CellType.EMPTY)
            {
                Number lbl = new Number(col, row, num);
                if(null != format)
                {
                    lbl.setCellFormat(format);
                } else
                {
                    lbl.setCellFormat(cell.getCellFormat());
                }
                dataSheet.addCell(lbl);
            } else if (cell.getType() == CellType.NUMBER)
            {
                // 數字單元格修改
                Number lbl = (Number)cell;
                lbl.setValue(num);
            } else if (cell.getType() == CellType.LABEL)
            {
                Label lbl = (Label)cell;
                lbl.setString(String.valueOf(num));
            }
        }
        
        /**
         * 修改公式單元格的值
         * @param dataSheet WritableSheet : 工作表
         * @param col int : 列
         * @param row int : 行
         * @param startPos int : 開始位置
         * @param endPos int : 結束位置
         * @param format
         * @throws RowsExceededException
         * @throws WriteException
         */
        private void modiFormulaCell(WritableSheet dataSheet, int col, int row, int startPos, int endPos, CellFormat format) throws RowsExceededException, WriteException
        {
            String f = getFormula(col, row, startPos, endPos);
            // 插入公式(只支持插入,不支持修改)
            WritableCell cell = dataSheet.getWritableCell(col, row);
            if (cell.getType() == CellType.EMPTY)
            {                    
                // 公式單元格
                Formula lbl = new Formula(col, row, f);
                if(null != format)
                {
                    lbl.setCellFormat(format);
                } else
                {
                    lbl.setCellFormat(cell.getCellFormat());
                }
                dataSheet.addCell(lbl);
            } else if (cell.getType() == CellType.STRING_FORMULA)
            {
                YTLogger.logWarn("Formula modify not supported!");
            }
        }
        
        /**
         * 得到公式
         * @param col int : 列
         * @param row int : 行
         * @param startPos int : 開始位置
         * @param endPos int : 結束位置
         * @return String
         * @throws RowsExceededException
         * @throws WriteException
         */
        private String getFormula(int col, int row, int startPos, int endPos)
                throws RowsExceededException, WriteException
        {
            char base = 'A';
            char c1 = base;
            StringBuffer formula = new StringBuffer(128);
            // 組裝公式
            formula.append("SUM(");
            if (col <= 25)
            {
                c1 = (char) (col % 26 + base);
                formula.append(c1).append(startPos).append(":")
                       .append(c1).append(endPos).append(")");
            } else if (col > 25)
            {
                char c2 = (char) ((col - 26) / 26 + base);
                c1 = (char) ((col - 26) % 26 + base);
                formula.append(c2).append(c1).append(startPos).append(":")
                       .append(c2).append(c1).append(endPos).append(")");
            }

            return formula.toString();
        }
        
        /**
         * 插入圖表工作表
         * @param wwb WritableWorkbook : 工作簿
         * @param vecImg Vector : 圖像鏈表
         * @throws RowsExceededException
         * @throws WriteException
         */
        private void insertImgsheet(WritableWorkbook wwb, Vector vecImg)
                throws RowsExceededException, WriteException
        {
            // 插入圖像
            WritableSheet imgSheet;
            if((wwb.getSheets()).length < 2)
            {
                imgSheet = wwb.createSheet("圖表", 1);
            } else
            {
                imgSheet = wwb.getSheet(1);
            }
            
            for (int i = 0; i < vecImg.size(); i++)
            {
                ChartImg chart = (ChartImg) vecImg.get(i);
                // 插入圖像標題
                Label lbl = new Label(0, 2 + 20 * i, chart.getImgTitle());
                WritableFont font = new WritableFont(WritableFont.ARIAL,
                        WritableFont.DEFAULT_POINT_SIZE, WritableFont.NO_BOLD, false,
                        UnderlineStyle.NO_UNDERLINE, Colour.DARK_BLUE2);
                WritableCellFormat background = new WritableCellFormat(font);
                background.setWrap(true);
                background.setBackground(Colour.GRAY_25);
                imgSheet.mergeCells(0, 2 + 20 * i, 9, 2 + 20 * i);
                lbl.setCellFormat(background);
                imgSheet.addCell(lbl);
                // 插入圖像單元格
                insertImgCell(imgSheet, 2, 4 + 20 * i, 8, 15, chart.getImgName());
            }
        }

        /**
         * 插入圖像到單元格(圖像格式只支持png)
         * @param dataSheet WritableSheet : 工作表
         * @param col int : 列
         * @param row int : 行
         * @param width int : 寬
         * @param height int : 高
         * @param imgName String : 圖像的全路徑
         * @throws RowsExceededException
         * @throws WriteException
         */
        private void insertImgCell(WritableSheet dataSheet, int col, int row, int width,
                int height, String imgName) throws RowsExceededException, WriteException
        {
            File imgFile = new File(imgName);
            WritableImage img = new WritableImage(col, row, width, height, imgFile);
            dataSheet.addImage(img);
        }
        
        /**
         * 測試
         * @param args
         */
        public static void main(String[] args)
        {
            XLSDemo demo = new XLSDemo();
            demo.makeXls();
        }
    }



    posted on 2008-03-10 18:15 jinfeng_wang 閱讀(1151) 評論(0)  編輯  收藏 所屬分類: javaZZ
    主站蜘蛛池模板: 亚洲AV永久无码精品一区二区国产| 久久大香香蕉国产免费网站| 无码国产精品久久一区免费| 亚洲美女视频免费| 可以免费观看的国产视频| 国产成人高清亚洲| 国产成人高清精品免费观看| 久久精品亚洲福利| 三上悠亚在线观看免费| 精品国产综合成人亚洲区| WWW免费视频在线观看播放| 亚洲中文字幕无码永久在线| 国精产品一区一区三区免费视频 | 久久精品亚洲男人的天堂| 国产成人无码免费网站| 亚洲中文字幕无码久久综合网| 中文字幕乱码免费看电影| 亚洲成a人片77777老司机| 日本一卡精品视频免费| 亚洲国产精品无码久久久| 成人免费视频77777| 亚洲国产一区二区三区在线观看| 国产一级理论免费版| 黄 色一级 成 人网站免费| 久久综合图区亚洲综合图区| 91网站免费观看| 亚洲另类自拍丝袜第五页| 亚洲精品无码你懂的网站| 中国性猛交xxxxx免费看| 亚洲午夜久久影院| 在线精品免费视频| 久久成人永久免费播放| 亚洲春色另类小说| 免费人成年激情视频在线观看| 3344在线看片免费| 国内精品久久久久影院亚洲| 亚洲精品第一国产综合精品99| 久久久99精品免费观看| 亚洲av无码成人精品区一本二本 | 亚洲视频在线一区二区| 中文字幕亚洲免费无线观看日本|