![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは。
現在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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
特定の色のついたセルを削除
-
【VBA】【ユーザーフォーム_Lis...
-
【Excel VBA】一番右端セルまで...
-
Excel VBAでCheckboxの名前を変...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
Excel VBA でFunctionプロシジ...
-
入力規則のリスト選択
-
Rangeの範囲指定限界
-
オートフィルタの結果をコピー...
-
色付きのセルをカウントする方...
-
ListBoxを選択したデータ編集② ...
-
データグリッドビューの結合セ...
-
EXCEL VBA 文中の書式ごと複写...
-
CellEnterイベント仕様について
-
Excelのセルから日付情報を取得...
-
飛び地セルの空白判定
-
下記のマクロの説明(意味)を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
C# DataGridViewで複数選択した...
-
入力規則のリスト選択
-
Excel VBA IF文がうまく動作し...
-
【VBA】写真の貼り付けコードが...
-
Excel 範囲指定スクショについ...
-
EXCEL VBA 文中の書式ごと複写...
-
Excel VBAでCheckboxの名前を変...
-
EXCEL 2010 VBAでピボットで複...
-
飛び地セルの空白判定
-
エクセルのカーソルを非表示に...
-
CellEnterイベント仕様について
おすすめ情報