質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

4072閲覧

【Kotlin/Apache POI】Excelのファイルをxlsからxlsxに変換して保存する方法

Haruto513

総合スコア52

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/06/19 06:08

実現したいこと

端末のダウンロードフォルダに入っているExcelのテンプレートに、値をセットして端末内に別名ファイルとして保存する処理を書いています。
このエクセルテンプレートファイルをApache POIで扱えるようにxls形式で保存しているのですが、後にこのファイルをxlsx形式に変換して、メール送信したいと考えています。

以下のようなコードでExcelファイルを編集・保存しています。

Kotlin

1 2val file = Paths.DOWNLOAD_FILE + "/templete.xls" 3 4var workbook: Workbook? = null 5try { 6 workbook = WorkbookFactory.create(FileInputStream(file)) 7}catch (e: IOException){ 8 e.printStackTrace() 9} 10 11val sheet = workbook?.getSheet("sheet1") 12sheet?.getRow(0)?.getCell(5)?.setCellValue("2020") 13 14val newFile = filesDir.path + "/dataFile.xls" 15workbook?.write(FileOutputStream(newFile)) 16 17workbook?.close() 18

これを後にメールに添付して送信する予定です。
ファイル保存するときに、**val newFile = filesDir.path + "/dataFile.xls"**のところを、**val newFile = filesDir.path + "/dataFile.xlsx"**という感じに拡張子を変えて保存しようとしてみたものの、上手くはいきませんでした。

Apache POIでxlsからxlsxへの保存は可能でしょうか。
どなたか知識をご教示して頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Haruto513

2020/06/19 08:19

xls形式のテンプレートファイルを使っている理由としましては、作成したxlsxファイルを読み込もうとしたところエラーが発生したためです。その原因として、https://one-it-thing.com/2025/←こちらの記事にあるような、MS Office2013以上で保存されたファイルはApache POIでは読み込めないというのがあったので、その解決法としてxlsでテンプレートを保存している、ということがあります。 ですが送信するときはxlsxが良いというので、こうして調べている次第です。 xlsでも普通に使えるので、もし方法がなかったり、やり方が複雑であるというのなら、諦めてこの仕様で相手方に説明させていただくつもりでいます。
junzi

2020/06/19 17:40

送信する前にxlsをPOIで開いて、POIでxlsxに保存し直せば良いのではないでしょうか?
junzi

2020/06/19 17:53

簡単に回答してしまいましたが、補足を、 xlsからxlsxに変換するとすれば、テストで変換が正常である事を証明する必要があると思いますがこれは結構厄介だと思います。 少なくとも拡張子を書き換えるレベルの工数では対応出来ないかと。。
Haruto513

2020/06/22 02:30

結構な工数がかかるようでしたら、やはりそのような仕様であると説明し提案しようと思います。 アドバイスありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問