![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
現在、poiを用いてexcelファイルを読み込み二次元配列に格納するプログラムを作っているのですが、
仕組みを理解していないせいかエラーが出て困っています。
class ReadFileArray2{
public static class DataTable{
String getCellValue;
double getCellValue;
DataTable(double getCellValue, String getCellValue){
this.getCellValue = getCellValue;
}
}
static final String ID = "/Users/home/java/20160501.xlsx";
public static void main(final String[] args) throws Exception{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.println("読み込むデータの日付を入力してください*(例5.1)");
String Date = br.readLine();
System.out.println(Date + "のデータの読み込みを開始します");
try {
FileInputStream fis = new FileInputStream(ID);
Workbook wb = WorkbookFactory.create(fis);
Sheet sheet = wb.getSheet(Date);
DataTable[][] table = new DataTable[86][146];
for(int i = 1; i <= sheet.getLastRowNum(); i++){
Row row = sheet.getRow(i);
for(int j = 1; j <= row.getLastCellNum(); j++){
Cell cell = row.getCell(j);
System.out.print(getCellValue(cell)+" ");
table[i][j] = new DataTable();
}
}
System.out.println("");
}catch(Exception e){
e.printStackTrace();
}
}
@SuppressWarnings(value={"deprecation"})
private static Object getCellValue(Cell cell){
if(cell == null){
return "";
}
switch (cell.getCellTypeEnum()) {
case STRING:
return cell.getRichStringCellValue().getString();
case NUMERIC:
if(org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
java.util.Date date = cell.getDateCellValue();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("h:mm");
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
String formatted = dateTimeFormatter.format(localDateTime);
return formatted;
}else{
return cell.getNumericCellValue();
}
case FORMULA:
return cell.getCellFormula();
default:
return "" ;
}
}
}
DataTableクラスを作り、数値と文字列をまとめ、配列を作り、switch文で取得したセルのタイプ振り分けているのですが、実行すると
ReadFileArray2.java:19: エラー: 変数 getCellValueはすでにクラス DataTableで定義されています
double getCellValue;
^
ReadFileArray2.java:21: エラー: 変数 getCellValueはすでにコンストラクタ DataTableで定義されています
DataTable(double getCellValue, String getCellValue){
^
ReadFileArray2.java:48: エラー: クラス DataTableのコンストラクタ DataTableは指定された型に適用できません。
table[i][j] = new DataTable();
^
期待値: double,String
検出値: 引数がありません
理由: 実引数リストと仮引数リストの長さが異なります
とエラーが出ます。
配列の文がそもそもおかしいのでしょうか?
数日悩んでます。
以前はDataTableクラスを作らずにString型、Double型に分けて配列を作っていたのですが
Object型をString,Doubleに変換できませんとエラーがでました。
そこで、クラスでまとめて代入したのですがこれもダメでした。
どこをどのように変えればうまくいくでしょうか?
教えてください。
No.2ベストアンサー
- 回答日時:
おそらく
public static class DataTable {
_ private Object value;
_ public DataTable(Object value) {
_ _ this.value = value;
_ }
_ public String toString() {
_ _ if (this.value == null) return "";
_ _ if (this.value instanceof String) return this.value;
_ _ if (this.value instanceof Double) return this.value.toString();
_ _ return "?";
_ }
}
...
table[i][j] = new DataTable(getCellValue(cell));
...
なんかの処理(table[i][j].toString());
No.1
- 回答日時:
同じクラスの中で複数のフィールドに同じ名前を使っちゃったら, どれがどれだかわかんなくなっちゃうじゃん.
「配列」がどうとか「仕組み」がどうとかいう前に, そも「Java のクラス」を理解していないように見えちゃうなぁ.
ご指摘ありがとうございます。
同じ名前を使うのはおかしいことは理解しておりますが、
switch文内で取得したCellのタイプをgetCellValueに返すようにしていますので、
仮に
String getCellStringValue;
double getCellNumericValue;
にしますと、正しい値が格納されなくなりませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
VB.NETで出来てC#で出来ない???
-
内部クラスのインスタンスを外...
-
C#にて別クラスの関数を使いたい
-
構造 他のクラスの構造体を別...
-
c++,ある関数のクラスから別の...
-
javaの配列について質問です。
-
C,C++,C++/CLIの構造体とクラス
-
メンバ関数内でオブジェクトを...
-
SwingでgetContentPaneのエラー...
-
java-別クラスの変数の使い方を...
-
内部クラスから別の内部クラス...
-
import と extends について
-
visual studioのデザイナ画面で...
-
C++で親クラスの関数を呼び出す...
-
クラス間でのデータ参照
-
呼び出し元のクラスのPrint
-
リフレクション
-
相互的な検索のできるハッシュ...
-
[java]クローズボックスを閉じ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
範囲外の数値を代入したらエラ...
-
関数内の変数に<summary>コメン...
-
c++,ある関数のクラスから別の...
-
C#にて別クラスの関数を使いたい
-
java-別クラスの変数の使い方を...
-
C++でfriendクラスにしているの...
-
a href="..." とServlet
-
親クラスから子クラスへアクセス。
-
構造 他のクラスの構造体を別...
-
Java リフレクションについて
-
import と extends について
-
C#でほかのファイルにある自作...
-
C#のクラスライブラリでメッセ...
-
Java
-
アップキャスト、ダウンキャス...
-
無名パッケージからのインポート
-
違うクラスからの変数の共有化
-
SwingでgetContentPaneのエラー...
-
ひとつのファイルにクラスは1つ?
おすすめ情報