
エクセルのデータをTAB区切りテキストに出力
1.エクセルのデータをTAB区切りテキストに出力して
2.そのテキストを入力としてrubyでデータ加工
という作業があります。現在1を手動で行っておりますが、ファイルが多いためこの操作をファイル名とシート名を指定してrubyから操作できればと考えております。
できれば追加でライブラリをインストールすることなく実現できればありがたいのですが、簡単な方法がございましたらご教示ください。
環境は、Win XP、Office 2003、ruby 1.9.1です。
最終的にはエクセルファイルから直接データを取得できるようにしたいのですが、当面は上記の方法で凌ぎたいと考えております。
No.2ベストアンサー
- 回答日時:
sample1.xlsをダウンロードされましたでしょうか?
おそらく11行目でエラーがでていますので、sample1.xlsファイルが見つからない為に
エラーが発生しているものと思われます。
同じ環境で試していますが、問題なく動作します。
また、タブ区切りのcsvを生成する方法の1つは、
標準ライブラリのcsvを利用して下記のように書けます。
CSV.open("test.csv", "w",{:col_sep=>"\t"}) do |writer|
writer << ["foo", "bar", "huga"]
end
これを利用して、excel1.rbを下記のように変更。
require 'win32ole'
require 'CSV'
def getAbsolutePath filename
fso = WIN32OLE.new('Scripting.FileSystemObject')
return fso.GetAbsolutePathName(filename)
end
filename = getAbsolutePath("sample1.xls")
xl = WIN32OLE.new('Excel.Application')
book = xl.Workbooks.Open(filename)
csv = CSV.open("test.csv", "w",{:col_sep=>"\t"}) #追加
begin
book.Worksheets.each do |sheet|
sheet.UsedRange.Rows.each do |row|
record = []
row.Columns.each do |cell|
record << cell.Value
end
csv <<record #追加
end
end
ensure
book.Close
xl.Quit
csv.close #追加
end
この回答への補足
sample1.xlsがあるのに気がつかず、自分で作成しておりました。
ですが、ダウンロードしたsample1.xlsでも同様でした。
同じ環境で動作するということですので、他の要因がありそうですね。
ご回答ありがとうございました。
office側にトラブルが在った様で、原因不明ですが別ユーザー名で確認しましたところ動作しました。
> 手動での「名前をつけて保存(タブ区切り)」と同じ操作
私の書き方が拙かった様で申し訳ありません。
Rubyのスクリプト側で各セルの値を拾う方法ではなく、つまり
book.Worksheets.each do |sheet|
sheet.UsedRange.Rows.each do |row|
row.Columns.each do |cell|
を使用せずに
rubyから保存コマンド(?)の様なものをole経由(?)で発行してシートを一括保存するような方法を知りたいのです。
ご存じの方がいらっしゃいましたら、ご教示をお願いいたします。
No.1
- 回答日時:
>>追加でライブラリをインストールすることなく実現できれば
Win32OLEを使用されてみてはいかがでしょうか?
使い方は、Rubyist Magazineで紹介されています。
http://jp.rubyist.net/magazine/?0004-Win32OLE
ご回答ありがとうございました。
提示いただいたリンク先のexcel1.rbを試してみたのですが、エラーになってしまいました。
----------
excel1.rb:11:in `method_missing': (in OLE method `Open': ) (WIN32OLERuntimeError
)
OLE error code:0 in <Unknown>
<No Description>
HRESULT error code:0x800a03ec
from excel1.rb:11:in `<main>'
--------
使用しているRubyは以下のとおりですが、1.9.1では動作しないのでしょうか?
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32]
またサンプルの内容は、各セルをスキャンしてデータを取得する内容ですが、手動での「名前をつけて保存(タブ区切り)」と同じ操作をする方法もありましたら、ご教示いただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】300万件越えCSVか...
-
Excelマクロ 空白セルを無視し...
-
VBAでcsvファイルもシートもあ...
-
ダブルコーテーション付きでCSV...
-
VBAで複数のCSVからレコードセ...
-
ファイル名を変数で書きこむfwr...
-
LibreOffice Calcのマクロで、...
-
CSVデータの文字列置換
-
EXCEL→CSV保存時のダブルクォー...
-
EXCEL CSVにて保存するときのダ...
-
IPアドレスのゼロパディング
-
バッチファイルでCSVの中身を仕...
-
CSVファイルの比較と結果の取得...
-
Pythonのコードエラーについて...
-
CSVで余計な空行が入る
-
【C#】 csvファイルをバイナリ...
-
バッチ処理 特定の文字以降を...
-
teratermで、ファイル名をinput...
-
VBA テキストボックスを選択状...
-
型の値をDataGridViewセルに変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロ 空白セルを無視し...
-
VBAでcsvファイルもシートもあ...
-
ダブルコーテーション付きでCSV...
-
【ExcelVBA】300万件越えCSVか...
-
ファイル名を変数で書きこむfwr...
-
VBAで複数のCSVからレコードセ...
-
CSVで余計な空行が入る
-
複数のファイルをまたぐエクセ...
-
VB.netでShellExecuteがしたい
-
LibreOffice Calcのマクロで、...
-
【C#】 csvファイルをバイナリ...
-
pythonでリストをCSVに出力する...
-
EXCEL→CSV保存時のダブルクォー...
-
PYthon Django csv関連
-
pythonについて質問です。 csv...
-
マクロで使うfor文
-
プログラムの間違いについて
-
Pythonのコードエラーについて...
-
Rubyを使用してcsvファイルを処...
-
CSVデータの文字列置換
おすすめ情報