| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- package UIB.UIB03.ZBS;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.HashMap;
- import jxl.Range;
- import jxl.write.Label;
- import jxl.write.WritableImage;
- import jxl.write.WritableSheet;
- /**
- *
- * @desc B类模板,元素占据4个单元格
- * @author meiguiping
- * @date 2010 1:51:12 PM
- */
- public class QltyGuaranteeBuilderA implements IQltyGuaranteeBuilder
- {
- private int columns; //总行数
- private int rows; //总列数
- private WritableSheet wSheet;
- // private int fixedChemRow;
- // private int fixedQltyRow;
-
-
- public QltyGuaranteeBuilderA()
- {
- }
-
- public QltyGuaranteeBuilderA(WritableSheet sheet)
- {
- wSheet = sheet;
- columns = wSheet.getColumns();
- rows = wSheet.getRows();
- }
-
- /**
- * 1、填充模板行
- * 2、填充实际值(表头、成分、材质)
- * 3、合并单元格
- * 4、填充备注
- * @author meiguiping
- * @date Sep 20, 2010
- */
- public void buildQltyGuarantee(String tmplNO , HashMap mapHead ,DataRowList[] drlChem , DataRowList[] drlQlty) throws Exception
- {
- //获取配置参数
- QltyTmplParser qtp = new QltyTmplParser();
- HashMap hm = qtp.getParamer();
- if(hm.size() <= 0)
- {
- System.out.println("参数配置出错,请检查!");
- return;
- }
- HashMap map = (HashMap)hm.get(tmplNO+"ATT");
-
- int maxCoilNo = Integer.parseInt(map.get("maxCoilNo").toString()); //质保书最多容纳卷数
- int chemTmplRow = StringFormat.getNumber(map.get("chemTmplRow").toString());//成分模板行位置
- int qltyTmplRow = StringFormat.getNumber(map.get("qltyTmplRow").toString());//性能模板行位置
-
- int headStartRow = StringFormat.getNumber(map.get("headStartRow").toString());//表头开始行
- int headEndRow = StringFormat.getNumber(map.get("headEndRow").toString());//表头结束行
-
- int chemCDRow = StringFormat.getNumber(map.get("chemCDRow").toString());//元素名填充的行
- int chemValStartRow = StringFormat.getNumber(map.get("chemValStartRow").toString());//成分值开始填充行
- int chemValStartCol = StringFormat.getNumber(map.get("chemValStartCol").toString());//成分开始列
-
- int qltyValStartRow = StringFormat.getNumber(map.get("qltyValStartRow").toString());//性能开始行
- int qltyValStartCol = StringFormat.getNumber(map.get("qltyValStartCol").toString());//性能开始列
- int qltyGigNameRow = StringFormat.getNumber(map.get("qltyGigNameRow").toString());//性能大名称开始行
- int qltySmallNameRow = StringFormat.getNumber(map.get("qltySmallNameRow").toString());//性能小名称开始行
- int qltyExtCodeRow = StringFormat.getNumber(map.get("qltyExtCodeRow").toString());//性能附加信息填充行
-
- int rmkStartRow = StringFormat.getNumber(map.get("rmkStartRow").toString());//备注开始行
- int rmkStartCol = StringFormat.getNumber(map.get("rmkStartCol").toString());//备注开始列
-
- int tabulatorRow = StringFormat.getNumber(map.get("tabulatorRow").toString());//质表人开始行
- int tabulatorCol = StringFormat.getNumber(map.get("tabulatorCol").toString());//质表人开始列
-
- if(drlChem == null) throw new Exception("质保书异常,缺少成分记录。");
-
- int coilCount = drlChem.length; //SQL查询出来的实际卷数
- if(maxCoilNo < coilCount) throw new Exception("质保书最大容纳卷数小于实际质保书卷数");
-
- ///补充拉力项目
- RowSetConverter.replenishPullItem(drlQlty[0]);//补充拉力项目
- ///填充模板行
- setChemTmpl( drlChem[0] , chemTmplRow , chemValStartCol , chemCDRow);//增加行操作对于元素代码填充行无影响,元素代码填充
- setQltyTmpl( drlQlty[0] , qltyTmplRow , qltyValStartCol , qltySmallNameRow );//模板行(材质)填充
- ///填充实绩值
- setHeader( mapHead , headStartRow , headEndRow );//质保书表头填充
- setChem(drlChem , chemValStartRow , chemTmplRow , map);//成分填充
- setQlty(drlQlty , qltyValStartRow , qltyTmplRow , map);//材质填充
- //合并单元格
- mergeQltyCells(qltySmallNameRow);//材质小名称行
- mergeQltyCells(qltyGigNameRow);//材质大名称行
- ///填充备注,制表人等
- wSheet.addCell( new Label(rmkStartCol, rmkStartRow, mapHead.get("CRET_NO_RMK")==null?"": mapHead.get("CRET_NO_RMK").toString(),wSheet.getCell(rmkStartCol, rmkStartRow).getCellFormat() ) );
- wSheet.addCell( new Label(tabulatorCol, tabulatorRow, mapHead.get("USERID")==null?"": mapHead.get("USERID").toString(),wSheet.getCell(tabulatorCol, tabulatorRow).getCellFormat() ) );
- }
-
- /**
- * 模板行的成分信息填充
- * @param tmplRow 原模板上录入成分实绩的行在当前操作副本上的行数,也就是成分开始的行
- * @param chemValStartCol 成分开始列
- */
- public void setChemTmpl(DataRowList drl , int tmplRow , int chemValStartCol , int chemCDRow) throws Exception
- {
- String key = "";
- String value = "";
- String extCode = "";
- for(int index =0 ; index < drl.size(); index++)
- {
- key = drl.getKey(index).toString();
- value = drl.getValue(index).toString();
- extCode = drl.getExtCode(index).toString();
- if("".equals(extCode))continue;//只填充元素名称
-
- for(int col = chemValStartCol ; col < columns; col++)
- {
- if( "".equals(wSheet.getCell(col, tmplRow).getContents().trim()))//判断是否已填充,只有成分元素才填充
- {
- wSheet.addCell(new Label(col , chemCDRow , key , ExcelStyleSeter.getChemValuetyle()));//元素代码行,元素名称填充
- wSheet.addCell(new Label(col , tmplRow , key , ExcelStyleSeter.getChemValuetyle()));//模板行
- break;//因为首先是按元素名循环,所以元素被填充后,需要进入大循环的下一个元素循环
- }
- }
- }
- }
-
- /**
- * 模板行的材质信息填充
- * @param tmplRow 材质模板行
- * @param qltyValStartCol 材质开始列
- * @param qltySmallNameRow材质小名称开始行
- */
- public void setQltyTmpl(DataRowList drl , int tmplRow , int qltyValStartCol , int qltySmallNameRow ) throws Exception
- {
- String key = "";
- String smallName = "";
- String bigName = "";
- String extCode = "";
- for(int index =0 ; index < drl.size(); index++)
- {
- key = drl.getKey(index).toString();
- // value = drl.getValue(index).toString();
- smallName = drl.getSmallName(index).toString();//小名称不可以为空,所以不判断,若为空则直接抛出异常
- bigName = drl.getBigName(index)==null?"":drl.getBigName(index).toString();
- extCode = drl.getExtCode(index)==null?"":drl.getExtCode(index).toString();
- for(int col = qltyValStartCol ; col < columns; col++)
- {
- if( "".equals(wSheet.getCell(col, tmplRow).getContents().trim())
- && !"".equals(smallName) )//判断是否已填充,只有材质、位置等才填充,对钢卷号等信息不填充
- {
- wSheet.addCell(new Label(col , qltySmallNameRow-1 , bigName , ExcelStyleSeter.getQltyNameStyle() ));//大名称
- wSheet.addCell(new Label(col , qltySmallNameRow , smallName , ExcelStyleSeter.getQltyNameStyle() ));//材质名称行
- wSheet.addCell(new Label(col , qltySmallNameRow+1 , extCode , ExcelStyleSeter.getQltyNameStyle() ));//补充码
- wSheet.addCell(new Label(col , tmplRow , key , ExcelStyleSeter.getChemValuetyle()/*,wSheet.getCell(col, 16).getCellFormat()*/));//模板行
- break;//某一列被填充后退出列的循环,进入下一个元素的循环。否则第一个元素将填满模板
- }
- }
- }
- }
-
- /**
- * @desc 表头填充
- * @param map 表头数据如合同号均在该map中
- * @param startRow 表头数据开始填充行
- * @param endRow 表头数据结束填充行
- * @throws Exception
- */
- public void setHeader(HashMap map , int startRow , int endRow) throws Exception
- {
- String key = "";
- //对表头所有的单元格进行循环,获取需要的质保书数据要求
- for(int row = 0 ; row <= endRow; row++)
- {
- for(int col = 0 ; col <= columns; col++)
- {
- key = wSheet.getCell(col, row).getContents().trim();//获取EXCEL中的文本内容
- if(key.equals(""))//EXCEL中内容为空,则进入下个循环处理
- continue;
- key = key.replaceFirst("\\[", "").replaceFirst("\\]", "").trim();//将EXCEL中用"[]"括起来的内容提取出来
- if(map.get(key) == null)//map中可能不包含所要求的内容,进入下个循环。
- continue;
- wSheet.addCell(new Label(col , row , map.get(key).toString() ,wSheet.getCell(col, row).getCellFormat()));
- }
- }
- }
-
- /**
- * @param chemValStartRow 成分实绩值填充起始行
- * @param tmplRow 成分模板行
- * @param chemCDRow 成分代码填充行(C、Si等名称)
- */
- public void setChem(DataRowList[] drl , int currentRow , int tmplValueRow ,HashMap map) throws Exception
- {
- String labelContent = "";//模板中的内容
- //成分行数据填充,包括钢卷号等
- for(int i = 0; i < drl.length; i++)
- {
- for(int col = 0 ; col < columns; col++)
- {
- labelContent = wSheet.getCell(col, tmplValueRow).getContents().trim();
- if("".equals(labelContent))//若模板中成分行的内容为空
- continue;
- if(drl[i].getValue(labelContent)==null)//为null则进入下次循环
- continue;
- //元素值
- wSheet.addCell(new Label(col , currentRow+i , drl[i].getValue(labelContent).toString() , ExcelStyleSeter.getCommStyle()) );
- }
- }
- }
-
-
- /**
- *
- * @param drl
- * @param qltyValStartRow 材质实绩值填充起始行
- * @param tmplRow 材质模板行
- * @throws Exception
- */
- public void setQlty(DataRowList[] drl , int qltyValStartRow , int tmplRow , HashMap map) throws Exception
- {
- Label label = null;
- String labelContent = "";//模板中的内容
- for(int i = 0; i < drl.length; i++)
- {
- for(int col = 0 ; col < columns ; col++)
- {
- labelContent = wSheet.getCell(col, tmplRow).getContents().trim();
- if("".equals(labelContent))//为空则进行下一次循环
- continue;
- if(drl[i].getValue(labelContent) == null)//DataRowList中可能不包含所要求的内容,进入下个循环。
- continue;
- label = new Label( col,qltyValStartRow+i ,drl[i].getValue(labelContent).toString() ,ExcelStyleSeter.getQltyValueStyle());
- wSheet.addCell(label);
- }
- }
- }
- public void setImage(ArrayList al )throws Exception
- {
- int imageNO = al.size()-1;//初始为行、列参数的定义,所以要减掉一个
- HashMap m = null;
-
- for(int i = 1 ; i <= imageNO; i++)
- {
- m = (HashMap)al.get(i);//不可从get(0)开始,0为行、列等的参数定义
- int col = StringFormat.getNumber(m.get("col").toString());
- int row = StringFormat.getNumber(m.get("row").toString());
- int width = StringFormat.getNumber(m.get("width").toString());
- int height = StringFormat.getNumber(m.get("height").toString());
- // System.out.println(col+"-------"+row+"----------"+"width"+"---------------"+height);
- String filePath= Thread.currentThread().getContextClassLoader().getResource("").getPath()+m.get("name").toString();
- File file = new File(filePath);
- WritableImage wi = new WritableImage(col,row,width,height , file);
- wSheet.addImage(wi);
- }
-
- }
-
- /**
- * @param currentRow 需要合并的行
- * @throws Exception
- */
- public void mergeQltyCells(int currentRow) throws Exception
- {
- String labelContent = "";
- String labelContentBefore = "";
- int count = 0;
- for(int col = 0; col <= columns; col++)
- {
- labelContent = wSheet.getCell(col , currentRow).getContents().trim();//当前单元格的值
- labelContentBefore = wSheet.getCell(col-1 , currentRow).getContents().trim();//之前一个单元格的值
- if(!labelContentBefore.equals(labelContent) && !"".equals(labelContentBefore))//
- {
- if((col-1)-count == col-1)
- continue;
- wSheet.mergeCells((col-1)-count, currentRow, col-1, currentRow );
- count = 0;//合并后,重新归0
-
- }
- else
- {
- count++;
- }
- }
- }
-
- }
|