Javaはjxlを使用する.JArパッケージ作成Excelファイルの最適な列幅問題の基本的な実現

6706 ワード

以前はjxlを使っていました.jarパッケージ、Excelファイルを読み書きしました.列幅に最適な問題にも注意しなかったがjxl.JArは列幅に最適な機能を提供していませんが、前回使って書いたように、列幅に最適な機能を基本的に実現できます.
注意、これは基本的に実現できるだけで、基本的には中国語の電子レポートに対してです.
1.実現構想
(1)一般的な中国語漢字の占有長さは英字の2倍で、「四角い字」は統一されている.
(2)Excelに書き込むデータについて各列の最大列幅を統計し、最後にこの列の列幅をこの列の最大値に直接設定すればよい.
2.実装コード
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

//   
public class ExcelBestColumn
{
    public static void main(String argus[]) throws Exception{
        //
         List<String> row1=new ArrayList<String>();    row1.add("     ");    row1.add("        ");
        List<String> row2=new ArrayList<String>();    row2.add("Best Column Width");    row2.add("Haha");
        List list=new ArrayList();    list.add(row1);    list.add(row2);
        
        //    Excel 
        WritableWorkbook book= Workbook.createWorkbook(new File("t.xls")); 
        WritableSheet sheet=book.createSheet("  ",0); 
        writeDataToSheet(sheet,list);
        book.write(); 
        book.close(); 
    }
    
    public static void writeDataToSheet(WritableSheet sheet,List<List<String>> list) throws Exception{
        int columnBestWidth[]=new  int[list.get(0).size()];    //           
        
        for(int i=0;i<list.size();i++){
            List<String> row=list.get(i);
            for(int j=0;j<row.size();j++){
                 sheet.addCell(new Label(j,i,row.get(j)));
                 
                 int width=row.get(j).length()+getChineseNum(row.get(j));    ///   2     
                 if(columnBestWidth[j]<width)    ///            
                     columnBestWidth[j]=width;
            }
        }
        
        for(int i=0;i<columnBestWidth.length;i++){    ///     
            sheet.setColumnView(i, columnBestWidth[i]);
        }
    }
    
    public static int getChineseNum(String context){    ///  context       
        int lenOfChinese=0;
        Pattern p = Pattern.compile("[\u4e00-\u9fa5]");    //   Unicode    
        Matcher m = p.matcher(context);
        while(m.find()){
            lenOfChinese++;
        }
        return lenOfChinese;
    }
}

3.実現するだけ
(1)これは一度のプロジェクトで書かれた、自動導関数Excel電子レポートで、うまく実現できます.主に漢字、アラビア数字です.
(2)漢字は四角い字で、文字ごとの大きさが統一されていて、驚くほど列幅を統計することができます.
(3)英字小文字は26文字で,各文字の大きさの違いは小さく,最適な列幅も実現できる.
(4)他の文字は、各文字の占有サイズの違いが不定であり、例えば、大文字シーケンス「III III」とアルファベット「DDDDDDD」である.
とにかくjxl.JArは列幅に最適な方法を自動的に実現していない.エクスポートする電子レポートに漢字が圧倒的に多い場合は、このプログラムで最適な列幅を実現することができます.
 
jxl.JArのExcelに対する基本的な操作はJavaデータ書き出し(書き込み)Excelファイル解析を参照してください.
                                           Javaデータインポート(読み取り)Excelファイル解析