こんにちは。
現在JavaでExcelのセルから情報を取り込んで、それらを加工し、データベースに登録するプログラムを考えております。
まずはExcelから情報を取得することを目指しているのですが、文字列や数字は正常にセルからString型の変数に取り込めましたが、日付情報だけ5ケタの数字に変化してString型に取り込まれてしまいます。
双方の型が違うため取得が上手くいかないのでは!?と考えているのですが、解決方法が見つかりません><
データは途中で加工するため、日付型(!?)でセルに入っているものを、Stringに取り込んで、Stringで加工をして、またStringから日付型に戻してデータベースに登録したいというものです。
自身でも色々と調べてみましたが、解決策は見つからず、こちらに泣きついた次第です。
ご教授いただければ幸いです、どうぞ宜しくお願い致します。
<Excel>
2003
<Excelの表>
A B C
1|食料品|個数|賞味期限|
2|バナナ|2|H23.6.30|
3|りんご|3|H23.7.1|
<参考プログラムのURL>
http://vapour.s22.xrea.com/javadojo/index.php?Jx …
<プログラム>
import java.io.File;
import jxl.Cell;
import jxl.Workbook;
import jxl.Sheet;
public class Sample{
public static void main(String[] args){
String inputFileName = "output.xls";
Workbook workbook = null;
try {
System.out.println(inputFileName + "ブックをオープンします");
workbook = Workbook.getWorkbook(new File(inputFileName));
if (workbook == null) {
System.err.println(inputFileName + "ブックオープンに失敗しました");
return;
}
} catch (Exception ex) {
System.err.println(ex.toString());
return;
}
System.out.println("1番目のシートにアクセスします");
Sheet sheet = workbook.getSheet(0);
if (sheet == null) {
System.err.println(inputFileName + "シート作成に失敗しました");
return;
}
Cell cell = null;
String cellStr = "";
try {
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
cell = sheet.getCell(i,j);
cellStr = cell.getContents();
System.out.println("セル("+i+","+j+") は「"+cellStr+"」です");
}
}
} catch (RuntimeException ex) {
System.err.println("A3セルの読込に失敗しました:" + ex.toString());
}
try {
if (workbook != null) {
workbook.close();
}
} catch (Exception ex) {
System.err.println(inputFileName + "ブックのクローズに失敗しました:"
+ ex.toString());
}
}
}
No.3ベストアンサー
- 回答日時:
>H23.6.30
と入力しているということは、セルの分類は「日付」にはなっていませんよね。
すみませんでした。
bin-chanさんのおっしゃるようにシリアル値は特定の日付からの経過日数を表しますので、
//windowsでのデフォルトでは1900/1/1 12:00:00AMから
//上記時刻を表すCalendarクラスのインスタンス
Calendar cal = Calendar.getInstance();
cal.set(1900, 0, 1, 12, 0, 0);
//1900/1/1のシリアルが1なので、加算する値は取得した値 - 1になる
int serial = Integer.parseInt(cellStr) - 1;
//1900/2/29は存在しないがエクセル内では存在しているらしいので
//その日付以降であればさらに -1
serial -= (serial > 60 ? 1 : 0);
//基準日に加算
cal.add(Calendar.DATE, serial);
//確認のために表示
System.out.println(String.format("%1$tD",cal));
という感じで計算はできると思います。
ただ、日付が入力されているセルが特定できていないとダメですが。
また、
>WindowsとMacで異なります。オプションで補正が可能。
というのは
http://support.microsoft.com/kb/214094/ja
などを参考に。
2度もご回答いただきありがとうございます。
お教えいただいた「基準日に加算する方法」で上手くいきました!!
長い時間悩んでいたので、本当に助かりました。
本当にありがとうございましたm(_ _)m
No.2
- 回答日時:
ava Excel APIは使ったことがないのですが、チュートリアルに日付セルの読み込み方があります。
http://www.andykhan.com/jexcelapi/tutorial.html# …
>if (c2.getType() == CellType.DATE)
>{
> DateCell dc = (DateCell) c2;
> datec2 = dc.getDate();
>}
日付セルであればDateCellにキャストしてDateオブジェクトを取得できるようです。
そのDateオブジェクトを文字列に変換すればいいのではないでしょうか。
この回答への補足
ご回答いただきありがとうございます。
ご紹介いただいたURLを参考にプログラムを修正し、getType()で説明文にあるExcelの各セルを取得したところ、バナナはLABEL、2はNUMBER、H23.6.30はNUMBERと判定されました。
やはりH23.6.3に関しては、セルの中身がNo1の方にご指摘いただいた通り、シリアル値として取得されており、NUMBERの判定となったみたいです^^;
自身の知識不足で未だ解決できていませんが、今一歩のような気もしますので、もう一度他の手法はないか、一から検討してみます。
再度ですが、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
Excelで空白セル直前のセルデー...
-
特定の色のついたセルを削除
-
Excel UserForm の表示位置
-
下記のマクロの説明(意味)を...
-
【Excel VBA】一番右端セルまで...
-
EXCEL VBA 文中の書式ごと複写...
-
VBAでユーザーフォームにセル値...
-
Excel VBA IF文がうまく動作し...
-
VBA にて、条件付き書式で背景...
-
Excel VBAでCheckboxの名前を変...
-
入力規則のリスト選択
-
DataGridViewでグリッド内に線...
-
SPREAD.netで選択セルの合計を...
-
エクセルVBAで、セル内のテキス...
-
VB6.0からExcel結合セルへ書出...
-
【VBA】写真の貼り付けコードが...
-
複数指定セルの可視セルのみを...
-
データグリッドビューの結合セ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
Excel UserForm の表示位置
-
【Excel VBA】一番右端セルまで...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
EXCEL VBA 文中の書式ごと複写...
-
下記のマクロの説明(意味)を...
-
Excel VBAでCheckboxの名前を変...
-
【VBA】写真の貼り付けコードが...
-
特定の色のついたセルを削除
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
DataGridViewのフォーカス遷移...
-
関数の引数でrangeを指定したとき
-
入力規則のリスト選択
-
DataGridViewで指定したセルの...
-
VBAでユーザーフォームにセル値...
-
複数指定セルの可視セルのみを...
おすすめ情報