1

はアンドロイドに jexcelapiを使用しています。

「Hello jExcelAPI!」という文字列を書きますが、読むと中国語の記号が表示されます。

どうすれば修正できますか?

前もって感謝します。

PS たぶんそれが役立つでしょう: ws.setCharacterSet(cs); で何を与える必要があるのか​​ わかりません。

ここに画像の説明を入力

package ru.elvigl.hello;

import java.io.File;
import java.io.IOException;
import java.util.Locale;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class HellojExcelAPIActivity extends Activity {

    final File file = new File("/sdcard/Folder/File.xls");

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void btnExport_Click(View v) throws IOException, RowsExceededException, WriteException {
        WorkbookSettings ws = new WorkbookSettings();

        //ws.setCharacterSet(cs);
        ws.setEncoding("Cp1251");
        ws.setExcelDisplayLanguage("RU");
        ws.setExcelRegionalSettings("RU");
        ws.setLocale(new Locale("ru", "RU"));

        WritableWorkbook workbook = Workbook.createWorkbook(file, ws); 
        WritableSheet sheet = workbook.createSheet("First Sheet", 0); 

        Label label = new Label(0, 0, "Hello jExcelAPI!");
        sheet.addCell(label); 

        workbook.write();
        workbook.close(); 
    }

    public void btnImport_Click(View v) throws BiffException, IOException {

        WorkbookSettings ws = new WorkbookSettings();

        //ws.setCharacterSet(cs);
        ws.setEncoding("Cp1251");
        ws.setExcelDisplayLanguage("RU");
        ws.setExcelRegionalSettings("RU");
        ws.setLocale(new Locale("ru", "RU"));

        Workbook workbook = Workbook.getWorkbook(file, ws); 
        Sheet sheet = workbook.getSheet(0); 
        Cell a1 = sheet.getCell(0,0); 
        String str = a1.getContents();

        TextView tv = (TextView) findViewById(R.id.tvCellValue);
        tv.setText(str);
    }
}
4

2 に答える 2

1

クラス「WorkbookSettings」のドキュメントは次のとおりです: http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/jxl/WorkbookSettings.htmlスプレッドシート、それが役立つ場合はエクスポートしません。漢字に関しては、あなたのロケールのために表示されていると思います。これらの定数を使用して、適切な言語および国のコンストラクタ パラメータを使用して Locale オブジェクトを正しくインスタンス化します

于 2011-12-08T01:00:42.957 に答える
0

私は何をすべきかわかりません :-(

new java.util.Local(Locale.ENGLISH)は正しくないコンストラクタです。

jdk-6u29を使用しましたが、現在は jdk-7u1 を使用してます。

Eclipseで私は以下を使用しています:

  • 「UTF-8」テキストファイルエンコーディング
  • コンパイラ コンパイル レベル 1.6

Android と PC で同じアプリケーションを作成します。その中でjexcel_android.jarを使用しています。

Helloという単語の場合:

パソコンでbyte[] b = a1.getString().getBytes("UTF-8");

  • [72、101、108、108、111]

Android の場合byte[] b = a1.getString().getBytes("UTF-8");

  • [-28, -96, -128, -26, -108, -128, -26, -80, -128, -26, -80, -128, -26, -68, -128]

作成したファイルをHex Viewerで開いた場合

ここに画像の説明を入力

以下の PC コード:

package ru.elvigl.jexcelwin;

import java.io.File;
import java.io.IOException;

import jxl.LabelCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class MainClass {

    final static File file = new File("D:/File.xls");

    public static void main(String[] args) 
            throws RowsExceededException, WriteException, IOException, BiffException {  

        writeFile();
        readFile();
    }

    private static void writeFile() 
            throws RowsExceededException, WriteException, IOException{

        WritableWorkbook workbook = Workbook.createWorkbook(file); 
        WritableSheet sheet = workbook.createSheet("First Sheet", 0); 

        Label label = new Label(0, 0, "Hello");
        sheet.addCell(label);

        workbook.write();
        workbook.close(); 

        System.out.println("File created");
    }

    private static void readFile() 
            throws BiffException, IOException{

        Workbook workbook = Workbook.getWorkbook(file); 
        Sheet sheet = workbook.getSheet(0); 

        LabelCell a1 = (LabelCell) sheet.getCell(0,0);

        byte[] b = a1.getString().getBytes("UTF-8");

        System.out.println(str);
    }
}

以下の Android コード:

package ru.elvigl.hello;

import java.io.File;
import java.io.IOException;

import jxl.LabelCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class HellojExcelAPIActivity extends Activity {

    final File file = new File("/sdcard/Folder/File.xls");

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void btnExport_Click(View v) throws IOException, RowsExceededException, WriteException {

        WritableWorkbook workbook = Workbook.createWorkbook(file); 
        WritableSheet sheet = workbook.createSheet("First Sheet", 0); 

        Label label = new Label(0, 0, "Hello");
        sheet.addCell(label);

        workbook.write();
        workbook.close(); 
    }

    public void btnImport_Click(View v) throws BiffException, IOException {

        Workbook workbook = Workbook.getWorkbook(file); 
        Sheet sheet = workbook.getSheet(0); 

        LabelCell a1 = (LabelCell) sheet.getCell(0,0);

        byte[] b = a1.getString().getBytes("UTF-8");
    }
}
于 2011-12-08T21:23:54.543 に答える