日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ZGY的Excel特征提取器初期版本完成

發(fā)布時間:2023/12/9 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZGY的Excel特征提取器初期版本完成 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

其實這個初期版本已經(jīng)基本上把他要的功能都實現(xiàn)了,呵呵

他的要求是批量轉(zhuǎn)Excel,把所有用黃色標出的單元格所在的列拷到一個新文件中

其實底層很簡單,界面做了倒有一會,還是一如既往的喜歡SWT啊~

附上Java利用Apache POI進行Excel文件的轉(zhuǎn)換的核心代碼??赡芩惴ㄉ喜皇呛芎?#xff0c;但數(shù)據(jù)量也不是很大。

?

??1public?static?HSSFWorkbook?convert(HSSFWorkbook?wb,byte[]?rgb){????
??2????????short?high?=?wb.getCustomPalette().findSimilarColor(rgb[0],?rgb[1],?rgb[2]).getIndex();
??3????????HSSFWorkbook?dest?=?new?HSSFWorkbook();
??4????????FormulaEvaluator?fe?=?wb.getCreationHelper().createFormulaEvaluator();
??5????????
??6????????Sheet?sheet?=?wb.getSheetAt(0);
??7????????HashSet<Integer>?toCopyColumns?=?new?HashSet<Integer>();
??8????????
??9????????Cell?copyHighCell?=?null;
?10????????Cell?copyNormalCell?=?null;
?11????????CellStyle?csHigh;
?12????????CellStyle?csNormal;
?13????????//read?row
?14????????for?(Row?row:sheet){
?15????????????for?(Cell?cell?:row){
?16????????????????//find?high?lighted?cell
?17????????????????if?(cell.getCellStyle().getFillForegroundColor()?==?high){
?18????????????????????//hit
?19????????????????????toCopyColumns.add(cell.getColumnIndex());
?20????????????????????copyHighCell?=?cell;
?21????????????????}
else{
?22????????????????????copyNormalCell?=?cell;
?23????????????????}

?24????????????}

?25????????}

?26????????csHigh?=?dest.createCellStyle();
?27????????csNormal?=?dest.createCellStyle();
?28????????if?(copyHighCell?!=null){
?29????????????csHigh.cloneStyleFrom(copyHighCell.getCellStyle());
?30????????????copyHighCell?=?null;
?31????????}

?32????????if?(copyNormalCell?!=null){
?33????????????csNormal.cloneStyleFrom(copyNormalCell.getCellStyle());
?34????????????copyNormalCell?=?null;
?35????????}

?36????????
?37????????
?38????????
?39????????//read?over,?toCopyColumns?now?has?all?column?that?need?to?copy
?40????????Integer[]?columns?=?new?Integer[toCopyColumns.size()];
?41????????toCopyColumns.toArray(columns);
?42????????Arrays.sort(columns);
?43????????
?44????????Sheet?destSheet?=?dest.createSheet("Sheet1");
?45????????for?(Row?row:sheet){
?46????????????Row?newRow?=?destSheet.createRow(row.getRowNum());
?47????????????for?(int?i?=?0;i?<?columns.length;i++){
?48????????????????Cell?newCell?=?newRow.createCell(i);
?49????????????????Cell?oldCell?=?row.getCell(columns[i]);
?50????????????????if?(oldCell?==?null){
?51????????????????????continue;
?52????????????????}

?53????????????????switch?(oldCell.getCellType()){
?54????????????????????case?Cell.CELL_TYPE_FORMULA:
?55????????????????????????CellValue?value?=?fe.evaluate(oldCell);
?56????????????????????????//judge?the?new?cell?format
?57????????????????????????newCell.setCellType(value.getCellType());
?58????????????????????????switch?(value.getCellType()){
?59????????????????????????????case?Cell.CELL_TYPE_NUMERIC:
?60????????????????????????????????newCell.setCellValue(value.getNumberValue());break;
?61????????????????????????????case?Cell.CELL_TYPE_BOOLEAN:
?62????????????????????????????????newCell.setCellValue(value.getBooleanValue());break;
?63????????????????????????????case?Cell.CELL_TYPE_ERROR:
?64????????????????????????????????newCell.setCellErrorValue(value.getErrorValue());break;
?65????????????????????????????case?Cell.CELL_TYPE_STRING:
?66????????????????????????????????newCell.setCellValue(value.getStringValue());break;
?67????????????????????????}

?68????????????????????????break;
?69????????????????????case?Cell.CELL_TYPE_NUMERIC:
?70????????????????????????newCell.setCellValue(oldCell.getNumericCellValue());
?71????????????????????????newCell.setCellType(oldCell.getCellType());break;
?72????????????????????case?Cell.CELL_TYPE_BOOLEAN:
?73????????????????????????newCell.setCellValue(oldCell.getBooleanCellValue());
?74????????????????????????newCell.setCellType(oldCell.getCellType());break;
?75????????????????????case?Cell.CELL_TYPE_ERROR:
?76????????????????????????newCell.setCellErrorValue(oldCell.getErrorCellValue());
?77????????????????????????newCell.setCellType(oldCell.getCellType());break;
?78????????????????????case?Cell.CELL_TYPE_STRING:
?79????????????????????????newCell.setCellValue(oldCell.getStringCellValue());
?80????????????????????????newCell.setCellType(oldCell.getCellType());break;
?81????????????????}

?82????????????????if?(oldCell.getCellStyle().getFillForegroundColor()?==?high){
?83????????????????????newCell.setCellStyle(csHigh);
?84????????????????}
else{
?85????????????????????newCell.setCellStyle(csNormal);
?86????????????????}

?87????????????????
?88????????????}

?89????????}

?90//????????System.out.println(wb.getNumCellStyles());
?91//????????System.out.println(dest.getNumCellStyles());
?92????????return?dest;
?93????}

?94????
?95????public?static?void?main(String?args[])?throws?FileNotFoundException,?IOException{
?96????????
?97????????HSSFWorkbook?wb?=?new?HSSFWorkbook(new?FileInputStream("test.xls"));
?98????????HSSFWorkbook?wb2?=?convert?(wb,new?byte[]{(byte)?0xff,(byte)?0xff,0x0});
?99????????wb2.write(new?FileOutputStream("tt.xls"));
100????}

?

其中需要注意一點:對于一個Workbook而言,同樣的單元格樣式會存儲在同一個樣式屬性中,由不同的單元格分別引用

所以一個個復(fù)制單元格的屬性是不行滴,這樣會造成目標文件樣式數(shù)過大。

也沒有什么好辦法,因為源文件簡單,所以就流氓了一下,哪位有更好的辦法能壓縮這個樣式表,讓重復(fù)的樣式合并呢?

?

上個圖

轉(zhuǎn)載于:https://www.cnblogs.com/latifrons/archive/2009/07/04/1516963.html

總結(jié)

以上是生活随笔為你收集整理的ZGY的Excel特征提取器初期版本完成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。