1

javaでエクセルファイルを読みたいです。古い形式 (Excel 95) の Excel ファイルと、新しい形式 (Excel 2007) の Excel ファイルがあります。現在 poi を使用していますが、古い形式の Excel ファイルを読み取ることができません。したがって、必要なのは、フォーマットが古いフォーマット (BIFF5) の場合は true 、新しいフォーマット (BIFF8) の場合は false のブール値を返すファイル名を渡す関数です。この関数の必要性は、古い形式には jxl in を、新しい形式には poi を使用できるようにすることです。

ここに私が持っているコードがあります:

    try
    {
      // create a new org.apache.poi.poifs.filesystem.Filesystem
      POIFSFileSystem poifs = new POIFSFileSystem(fin);
      w = new HSSFWorkbook(poifs);
    }
    catch (IOException e)
    {
      w = null;
      throw e;
    }
    catch (OutOfMemoryError e) // java.lang.OutOfMemoryError:
    {
      w = null;
      throw e;
    }
    catch (OldExcelFormatException e) // OldExcelFormatException
    {
      w = null;
      System.out.println("OldExcelFormatException");
      translateBIFF5();
    }

 private void translateBIFF5() throws IOException, CmpException
  {
    ArrayList<String> row = null;
    try
    {
      jxl_w = Workbook.getWorkbook(excelFile);
    }
    catch (BiffException e)
    {
      jxl_w = null;
      e.printStackTrace();
    }
    catch (IOException e)
    {
      jxl_w = null;
      throw e;
    }
    catch (OutOfMemoryError e) // java.lang.OutOfMemoryError:
    {
      jxl_w = null;
      throw e;
    }

    if (jxl_w != null)
    {
      try
      {
        for (currentSheet = 0; currentSheet < jxl_w.getNumberOfSheets(); currentSheet++)
        {
          jxl_sheet = jxl_w.getSheet(currentSheet);
      . . . . .
4

2 に答える 2

1

1つの方法は、Windows ASSOCおよびFTYPEコマンドを呼び出し、出力をキャプチャして解析し、インストールされているOfficeのバージョンを判別することです。

C:\Users\me>assoc .xls
.xls=Excel.Sheet.8

C:\Users\me>ftype Excel.sheet.8
Excel.sheet.8="C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE" /e

ここに簡単な例があります:

import java.io.*;
public class ShowOfficeInstalled {
    public static void main(String argv[]) {
      try {
        Process p = Runtime.getRuntime().exec
          (new String [] { "cmd.exe", "/c", "assoc", ".xls"});
        BufferedReader input =
          new BufferedReader
            (new InputStreamReader(p.getInputStream()));
        String extensionType = input.readLine();
        input.close();
        // extract type
        if (extensionType == null) {
          System.out.println("no office installed ?");
          System.exit(1);
        }
        String fileType[] = extensionType.split("=");

        p = Runtime.getRuntime().exec
          (new String [] { "cmd.exe", "/c", "ftype", fileType[1]});
        input =
          new BufferedReader
            (new InputStreamReader(p.getInputStream()));
        String fileAssociation = input.readLine();
        // extract path
        String officePath = fileAssociation.split("=")[1];
        System.out.println(officePath);
      }
      catch (Exception err) {
        err.printStackTrace();
      }
    }
  }

また

レジストリでキーを検索できます。

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ App Paths

この質問から明らかなように、これにはおそらくいくつかの作業が必要になります。

Javaを使用したWindowsレジストリへの読み取り/書き込み

于 2013-03-13T11:45:33.567 に答える
1

POIの代わりにAndyKhanのJExcelを試すことをお勧めします。POIが特にうまく設計または文書化されているとは思いません。私はJExcelで幸運に恵まれました。それを試してみてください。

于 2013-03-13T11:29:02.340 に答える