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

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

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

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3174閲覧

CSVの表示方法は設定できるのか

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

1クリップ

投稿2016/06/24 08:07

編集2016/06/24 08:44

お世話になります。

アプリからメーラーを立ち上げ送信する際、配列の中身をCSVファイルに変換して添付したいと思っています。

swift

1 func toCSV(input: [[String]]) -> String { 2 return input.map { 3 $0.map { 4 $0.containsString(",") || $0.containsString("\"") 5 ? "\"" + $0.stringByReplacingOccurrencesOfString("\"", withString: "\"\"") + "\"" 6 : $0 7 }.joinWithSeparator(",") 8 }.joinWithSeparator("\r\n") 9 }

CSVに変換する方法はこちらのやり方で上手くいったのですが、パソコン側からファイルを開いてみるとデータが横並びになってしまい、困っています。
もし可能ならばパソコンで表示する際縦並びのデータ表示にしたいと思っているのですが、配列に保存している以上仕方がないことなのでしょうか?コードなどで指定できるのが理想なのですが、もし方法などがありましたらご教授ください。
乱文失礼いたします。よろしくお願いいたします。


補足です。

swift

1 func onClickMailButton() { 2 if MFMailComposeViewController.canSendMail() == false { 3 print("Email Send Failed") 4 return 5 } 6 csvData += ([todoItem]) 7 sendMailWithCSV("メール件名", message: "メール本文", csv: csvData) 8 9 }

swift

1 func sendMailWithCSV(subject: String, message: String, csv: [[String]]) { 2 let mailViewController = MFMailComposeViewController() 3 mailViewController.mailComposeDelegate = self 4 let toRecipients = ["メールアドレス"] 5 mailViewController.setSubject(subject) 6 mailViewController.setToRecipients(toRecipients) 7 8 mailViewController.addAttachmentData(toCSV(csv).dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!,mimeType: "csv", fileName: "sample.csv") 9 self.presentViewController(mailViewController, animated: true) {} 10 11 }

添付ファイルはこのように作成しています。
説明不足で申し訳ありません。

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

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

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

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

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

fuzzball

2016/06/24 08:26

添付するファイルをどのように作成しているか教えて下さい。
guest

回答1

0

ベストアンサー

改行コード?

改行コードの問題だと思いますので、CSVを開くアプリケーションの改行設定を変更して下さい。
変更出来ない場合は、アプリ側で改行コードを変更して下さい。

検証しました

swift

1let csv = [["hogehoge", "mogemoge"],["ほげほげ", "もげもげ"]]

これをメール送信しましたが、Macのテキストエディット、Windowsのメモ帳、ともに縦並びに表示されました。(最後の行に改行がありませんでしたが)

hogehoge,mogemoge ほげほげ,もげもげ

文字コード?

エクセルとUTF-8は相性が悪い(?)ようなので、シフトJISでエンコードしてあげましょう。

swift

1mailViewController.addAttachmentData(toCSV(csv).dataUsingEncoding(NSShiftJISStringEncoding, allowLossyConversion: false)!,mimeType: "csv", fileName: "sample.csv")

投稿2016/06/24 08:39

編集2016/06/30 06:55
fuzzball

総合スコア16731

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

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

fuzzball

2016/06/24 09:10

検証結果を追記しました。
退会済みユーザー

退会済みユーザー

2016/06/27 08:17

お世話になります。回答ありがとうございました。 fuzzballさんの検証通りにこちらでも試してみたのですが、やはり横並びになってしまいました(確認作業はExcelで行っています)。 >アプリ側で改行コードを変更してください CSVに変換する関数内で改行コードを記述してしまうということでしょうか? プログラミング経験が浅く、重ねて質問してしまいすみません。
fuzzball

2016/06/27 23:49

Excelは使っていないのでLibreOfficeで開いてみましたが、キチンと縦に並びました。 ↓な感じです。 | hogehoge | mogemoge | | ほげほげ | もげもげ | ちなみに、テキストエディタで開いても横並びになってしまうのでしょうか? >>CSVに変換する関数内で改行コードを記述してしまうということでしょうか? すでにtoCSVの中に改行コード("\r\n")は入っていますし、変換後のテキスト(.csv)にもCRLFが入っています。 これはプログラムの問題ではなく、エクセルの使い方の問題のような気がします。
退会済みユーザー

退会済みユーザー

2016/06/30 05:26

返信が遅くなりすみません。コメントありがとうございます。 >テキストエディタで開いても横並びになってしまうのでしょうか? メモ帳を使っての確認になってしまったのですが、縦並びに表示されていました。 また、検証データを外部データとしてExcelで読み込ませたところ、キチンと縦に表示されました!(メールから直接開こうとすると文字化けしてしまうのですが;;) NSUserDefaultsで保存した値の配列を変換し、表示させようとすると起きてしまう現象?のようでした。縦並びの部分では解決です。お騒がせしました…。
fuzzball

2016/06/30 05:53

>>検証データを外部データとしてExcelで読み込ませたところ これは、メールから一旦ダウンロードしてExcelで読み込んだということでしょうか? この辺詳しくないので当てずっぽうですが、mimeTypeを"text/csv"にしても変わらないでしょうか?
退会済みユーザー

退会済みユーザー

2016/06/30 06:08

回答ありがとうございます! >メールから一旦ダウンロードしてExcelで読み込んだということ その通りです。 直接開くとひらがな部分が文字化けしてしまいましたので… >myneTypeを"text/csv"にしても〜 やってみましたが、特に何か変わったというふうではありませんでした。
fuzzball

2016/06/30 06:52

ふと気づくと、いつの間にか改行問題から文字化け問題に変わってますね。 ということは文字コードの問題ということで、「エクセル UTF-8」でググってみるとそれっぽいのが出てくる出てくるw 結局、エクセルがタコということで。 エンコード指定のところを NSShiftJISStringEncoding にしてシフトJISにしてやれば、メーラーから直接開いても大丈夫でした。(シフトJISに無い文字を使っているとダメですが)
退会済みユーザー

退会済みユーザー

2016/06/30 09:05

エンコード指定のところをシフトJISにしたところ、文字化け問題は解決しました。 話があっちこっちしてしまって本当にすみませんでした… 改行問題についてですが、当方の勘違いかもしれないです… 検証データの色々をやっているうちに気づいたのですが、これって、CSVで表示されるときは多次元配列の中の配列ごとに改行されますよね? hogehoge,mogemoge ほげほげ,もげもげ NSUserDefaultsで値を保存する際、多次元配列の[0]番目にばかりデータを入れていたので改行コードがあったとしても反映されなかったのでは…という気がしてきました (わかりにくい説明でごめんなさい;) これからもう一度コードを見直してみますが、だとしたらタコなのは質問者でした…本当にすみません…
fuzzball

2016/06/30 09:25

なんとなく‥分かったような‥気が‥しなくもないですw 改行の件はそういうことかも知れないですね。 文字コードの件はエクセルということで。
退会済みユーザー

退会済みユーザー

2016/07/01 01:39

説明不足であるにも関わらず丁寧に回答していただき、ありがとうございました! また何かありましたらよろしくお願いします…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問