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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2816閲覧

Python 辞書型式のデータのCSV出力機能を Excel出力へ 変更したいが、csv.DictWriterに代わるものは ございますか?

saya24

総合スコア222

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/02 07:34

編集2020/06/02 07:38

当初、辞書型データを CSVファイルに出力する機能を作成したのですが、Excelファイルへ 切り替えられないかなぁ と改善を考えています。
以下のコードでは元のコードを、
・保存用ファイルファイアログで現れる拡張子を、csv⇒xlsxに
・保存されるファイル名の初期値の拡張子を、xlsxに変更
としただけの対応です。

このコードを実行すると一応にファイルが仕上がるのですが
当該ファイルを開こうとすると「ファイル破損」を疑うメッセージが現れてしまいます。 どういう対策を施せばよろしいでしょうか?
簡易に対応できる、Excel版の csv.DictWriter みたいなものは ないだろうか?という主旨の質問です。

よろしくお願いします。

Python

1def csv_Out(self, event=None): 2 if (self.btn3['state'] != 'normal'): 3 return 4 5 ######ftypes=[('data files','*.csv;*.txt')] 6 ftypes=[("excel", "*.xlsx")] 7 8 if self.txt2.get() != "": 9 ####ini_fname = self.txt2.get() + "_" + dt_now.strftime('%Y%m%d%H%M%S') + ".csv" 10 ini_fname = self.txt2.get() + "_" + dt_now.strftime('%Y%m%d%H%M%S') + ".xlsx" 11 else: 12 ####ini_fname = dt_now.strftime('%Y%m%d%H%M%S') + ".csv" 13 ini_fname = dt_now.strftime('%Y%m%d%H%M%S') + ".xlsx" 14 fname = tkfd.asksaveasfilename(filetypes=ftypes, 15 initialfile=ini_fname) 16 17 if fname: 18 header = list(output_data[0].keys()) # 列の順番を規定 19 20 with open(fname, "w", newline="") as f: 21 writer = csv.DictWriter(f, fieldnames=header, quoting=csv.QUOTE_NONNUMERIC) 22 writer.writeheader() # ヘッダーを書き込む 23 writer.writerows(output_data) # データを書き込む 24 25 tkmb.showinfo("Result","Finished converting !", parent=self.this) 26 self.dialog.grab_set() 27 else: 28 return

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

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

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

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

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

guest

回答1

0

.csvファイルと.xlsxファイルはファイル構造が違うため、CSV出力時に拡張子だけを変えてもダメです。
別途インストールが必要ですが、pythonでExcelフォーマットの入出力を可能にするライブラリとしてopenpyxlがよく使われていますのでこちらの利用をオススメします。
参考
PythonでExcelファイル(xlsx)を読み書きするopenpyxlの使い方

投稿2020/06/02 09:47

x98000

総合スコア1096

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

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

saya24

2020/06/06 00:03

ご見解ありがとうございました。また放置してしまい申し訳ありませんんでした。ご紹介の記事の「任意の位置のセルに2次元配列を書き込み」の部分を参考に対応してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問