Indexへ
(19822)// 【19806】→(19812) ------------------------ 【タイトル】エクセルの文字をJWWへリンク
【記事番号】 19806 (*)
【 日時 】07/03/22 11:28
【 発言者 】風呂好き
毎度、お世話になります。
エクセルで作成した文字をJWWにリンクさせようと思い、
rubyの本など買ってなにか出来るのかな??と期待をしましたが
初心者にはハードルが高すぎてギブアップ・・・。
にわか勉強では外変は難しいですね。
行いたい作業は以下のような事なのですが
調査.jww と 調査.xlsが同じホルダーにあります。
1 調査.xls を起動
2 調査.xls の「リンク」と言う名のsheetの
C列・D列をクリップボードにコピー
3 Terapadを起動
4 クリップボードの内容を貼り付け
5 「図面.csc」と言う名のファイルで同じホルダーに保存
ちなみにエクセルのC列とD列には以下のような内容になっています。
C列 D列
%%施主名 ○○さん
%%住所 ○○市○○町
%%写真内容 ****から撮影
%%番号03-K W=300.0mm
%%番号03-L L=400cm
こんな感じがずっと続いています。
これがテキストファイル「図面.csc」となれば、エクセルと文字の
リンクが出来てありがたいです。
手動で行っても良いのですが、外部変形なので、すっきり作業が
出来るといいなー・・・(^_^;)
と、このフォーラムにあまえてみました。
すみません、よろしくお願いします。
風呂好き
Indexへ
(19806)← 【19812】→(19814) ------------------------ 【タイトル】Re(1):エクセルの文字をJWWへリンク
【記事番号】 19812 (19806 )
【 日時 】07/03/22 16:04
【 発言者 】コジマ
▼風呂好きさん:
>毎度、お世話になります。
>
>エクセルで作成した文字をJWWにリンクさせようと思い、
>rubyの本など買ってなにか出来るのかな??と期待をしましたが
>初心者にはハードルが高すぎてギブアップ・・・。
>にわか勉強では外変は難しいですね。
いきなり、エクセル操作ですか(^_^;
EXCEL VBA の範疇なので、一般のruby本には解説されてないでしょう。
拡張ライブラリを使えば、rubyで記述できますが、部分的に EXCEL VBA のメソッド名を使用することになります。
>
>行いたい作業は以下のような事なのですが
>調査.jww と 調査.xlsが同じホルダーにあります。
>
>1 調査.xls を起動
>2 調査.xls の「リンク」と言う名のsheetの
> C列・D列をクリップボードにコピー
>3 Terapadを起動
>4 クリップボードの内容を貼り付け
>5 「図面.csc」と言う名のファイルで同じホルダーに保存
>
>ちなみにエクセルのC列とD列には以下のような内容になっています。
> C列 D列
>%%施主名 ○○さん
>%%住所 ○○市○○町
>%%写真内容 ****から撮影
>%%番号03-K W=300.0mm
>%%番号03-L L=400cm
>
>こんな感じがずっと続いています。
>これがテキストファイル「図面.csc」となれば、エクセルと文字の
>リンクが出来てありがたいです。
@REM EXCELからTXT書出
@echo off
REM #jww
REM #cd
REM #hf
REM #h0
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt
exit
#!ruby -Ks
file_name="/調査.xls" #EXCELファイル名
sheet_name="リンク" #ワークシート名
file_name2="/図面.csc" #ファイル名
mypath=Dir.pwd;path=Dir.pwd
while ARGF.gets
xy=split
if xy[0]=~/file=/
path=$'
end
end
path.chomp!
path_a=path.split("\\")
path=path_a[0..-2].join("/")
puts "EXCELを起動しています。しばらくお待ちください"
require 'win32ole'
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
array=[]
begin
workbook = excel.Workbooks.open(path+file_name)
worksheet = workbook.Worksheets(sheet_name)
y=1
while(worksheet.cells(y,3).value && worksheet.cells(y,4).value)
array<<[worksheet.cells(y,3).value,worksheet.cells(y,4).value]
y += 1
end
open(mypath+"/jwc_temp.txt","w"){|f|f.puts("h#図面.cscを作成しました")}
rescue
open(mypath+"/jwc_temp.txt","w"){|f|f.puts("h#エラーが発生しました")}
ensure
workbook.close
excel.quit()
end
if array.size>0
l=0
array.each{|a,b| l=a.size if l open(path+file_name2,"w"){|f|
array.each{|a,b|f.printf("%-#{l}s\t%s\n",a,b)}
}
system("notepad #{path+file_name2}")
end
Indexへ
(19812)← 【19814】→(19818) ------------------------ 【タイトル】Re(2):エクセルの文字をJWWへリンク
【記事番号】 19814 (19812 )
【 日時 】07/03/22 17:54
【 発言者 】風呂好き
▼コジマさん:
ありがとうございます。
早速トライしてみました。
書いていただいた内容はよくわかりませんが
(見た瞬間・・・自分では手に負えないと世界と思いました)
とにかく動かしたい気持ちで
(ドキドキしながら (^.^))
まずは、rubyファイルを作ってみようと思い・・・
#!ruby -Ks
file_name="/調査.xls" #EXCELファイル名
sheet_name="リンク" #ワークシート名
file_name2="/図面.csc" #ファイル名
mypath=Dir.pwd;path=Dir.pwd
以降を
「エクセル変換.rb」
というファイルにして、「調査.xls」のあるホルダーに置きました。
全角スペースは半角スペースに変換しました。
そして「エクセル変換.rb」をダブルクリックすれば、きっと
エクセルが起動して「図面.csc」が出来るはず・・・
と思ったのですが、出来ませんでした。(ーー;)
なにか素人考えだったのでしょうか??
本屋で以前「Rubyの冒険」と言う本を買い
その中にある「Appllo」とかいうプログラムで
rubyの実行状態がわかるので、「エクセル変換.rb」をダブルクリックすると
「実行」状態でとまってしまっています。
強制的に終了させますと
(Interrupt)
D:\工損書式作成\事前外部\エクセル変換.rb:8:in `gets'
とメッセージが出てきます。
何か、まずい事をしているのでしょうか???
いろいろと、ご丁寧に書いただいたのに、どうも理解不足で
申し訳ありません。
よろしくお願いします。
風呂好き
Indexへ
(19814)← 【19818】→(19821) ------------------------ 【タイトル】Re(3):エクセルの文字をJWWへリンク
【記事番号】 19818 (19814 )
【 日時 】07/03/22 18:37
【 発言者 】コジマ
▼風呂好きさん:
>▼コジマさん:
>ありがとうございます。
>早速トライしてみました。
>書いていただいた内容はよくわかりませんが
>(見た瞬間・・・自分では手に負えないと世界と思いました)
>とにかく動かしたい気持ちで
>(ドキドキしながら (^.^))
>まずは、rubyファイルを作ってみようと思い・・・
>
>#!ruby -Ks
>
>file_name="/調査.xls" #EXCELファイル名
>sheet_name="リンク" #ワークシート名
>file_name2="/図面.csc" #ファイル名
>
>mypath=Dir.pwd;path=Dir.pwd
>
>以降を
>「エクセル変換.rb」
>というファイルにして、「調査.xls」のあるホルダーに置きました。
>全角スペースは半角スペースに変換しました。
>
>そして「エクセル変換.rb」をダブルクリックすれば、きっと
>エクセルが起動して「図面.csc」が出来るはず・・・
>と思ったのですが、出来ませんでした。(ーー;)
>
>なにか素人考えだったのでしょうか??
>本屋で以前「Rubyの冒険」と言う本を買い
>その中にある「Appllo」とかいうプログラムで
>rubyの実行状態がわかるので、「エクセル変換.rb」をダブルクリックすると
>「実行」状態でとまってしまっています。
バッチファイルにrubyスクリプトを埋め込んでいますので、
rubyスクリプトファイルは不要です。
(スクリプトファイルを作成してはいけません)
全文がバッチファイルになります。(バッチファイルのみで動作)
エクセル変換.bat で保存して、全角スペースを半角スペースに一括置換してください。
尚、このバッチファイルは、調査.jww 上で、外変を実行しないと動作しません。
(path取得できない為)
タイトルがJWWへリンクとなっていますので、そのようにしています。
Indexへ
(19818)← 【19821】→(19824) ------------------------ 【タイトル】動いたのですが
【記事番号】 19821 (19818 )
【 日時 】07/03/22 22:25
【 発言者 】風呂好き
▼コジマさん:
アドバイスありがとうございます。
どうにか動きました。
エクセル変換.bat
起動後、エクセルが起動し
テキストファイルの保存ができました。
やったー!!! (^_^)v
と、ここまで良かったのですが
JWWに文字が完全にリンクしませんでした。(^_^;)
この原因はこんな具合です。
C列 D列
%%施主名 ○○様
%%住所 ○○市
とテキストファイルにはなったのですが
%%施主名と○○様の間にはtabキーが挿入されて
JWWにリンクしますが%%住所と○○市の間には
スペースキー+tabキーとなって
JWWには文字のリンクはできません。
この解決策として%%で始まる文字の長さを一番長い文字に
あわせればよいのかなと思っています。
(例えば%%住所Aなどとする)
このくらいの処置は私でもなんとか出来ます。(ーー;)
もう一つ問題が(次々とすみません)
手動でクリップボードにコピーして
テキストファイルにした時は
C列 D列
%%長さ L=130cm
なのですが、今回のが外変使いますと
C列 D列
%%長さ 130
となります。
この原因はエクセル側で130と数値表示を
セルの書式設定でL=130cmと表現させています。
このあたりが外部変形と手動のクリップボードとの
違いなのかなと思っています。
この辺が解決できると良いけれど、難しいのでしょうか。
完全に未知世界というか、試行錯誤など到底できない
世界というか・・・・(^_^;)
いろいろとすみません。
アドバイスよろしくお願いします。
風呂好き
Indexへ
(19821)← 【19824】→(19832) ------------------------ 【タイトル】Re(1):動いたのですが
【記事番号】 19824 (19821 )
【 日時 】07/03/22 23:59
【 発言者 】コジマ
▼風呂好きさん:
>この原因はこんな具合です。
> C列 D列
>%%施主名 ○○様
>%%住所 ○○市
>
>とテキストファイルにはなったのですが
>%%施主名と○○様の間にはtabキーが挿入されて
>JWWにリンクしますが%%住所と○○市の間には
>スペースキー+tabキーとなって
>JWWには文字のリンクはできません。
テキストファイルの見栄えをよくするために整形した結果です。
整形は解除できます。
>もう一つ問題が(次々とすみません)
>
>手動でクリップボードにコピーして
>テキストファイルにした時は
>
> C列 D列
>%%長さ L=130cm
>
>なのですが、今回のが外変使いますと
> C列 D列
>%%長さ 130
>
>となります。
>この原因はエクセル側で130と数値表示を
>セルの書式設定でL=130cmと表現させています。
>このあたりが外部変形と手動のクリップボードとの
>違いなのかなと思っています。
>
.value を .text に変更すれば可能?
@REM EXCELからTXT書出
@echo off
REM #jww
REM #cd
REM #hf
REM #h0
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt
exit
#!ruby -Ks
file_name="/調査.xls" #EXCELファイル名
sheet_name="リンク" #ワークシート名
file_name2="/図面.csc" #ファイル名
mypath=Dir.pwd;path=Dir.pwd
while ARGF.gets
xy=split
if xy[0]=~/file=/
path=$'
end
end
path.chomp!
path_a=path.split("\\")
path=path_a[0..-2].join("/")
puts "EXCELを起動しています。しばらくお待ちください"
require 'win32ole'
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
array=[]
begin
WIN32OLE.const_load( excel )
workbook = excel.Workbooks.open(path+file_name)
worksheet = workbook.Worksheets(sheet_name)
y=1
while(worksheet.cells(y,3).text != "" && worksheet.cells(y,4).text != "" )
array<<[worksheet.cells(y,3).text,worksheet.cells(y,4).text]
y += 1
end
open(mypath+"/jwc_temp.txt","w"){|f|f.puts("h#図面.cscを作成しました")}
rescue
open(mypath+"/jwc_temp.txt","w"){|f|f.puts("h#エラーが発生しました")}
ensure
workbook.close
excel.quit()
end
if array.size>0
open(path+file_name2,"w"){|f|
array.each{|a,b|f.printf("%s\t%s\n",a,b)}
}
system("notepad #{path+file_name2}")
end
Indexへ
(19824)← 【19832】//(19808) ------------------------ 【タイトル】すばらしいです。
【記事番号】 19832 (19824 )
【 日時 】07/03/23 16:26
【 発言者 】風呂好き
▼コジマさん:
返事遅くなりました。
ありがとうございます。
ドキドキしながらチャレンジしました。
完璧です。
すばらしいの一言です。(^_^)v
自分でも出来ると良いのですが
内容を見ると・・・?????(~_~;)
いつかは自分でと思いながらも
ハードルの高さに圧倒されます。
みなさんの外変プログラムを利用させていただきながら
JWWを今後とも、楽しく使わせていただこうと
思っています。
コジマさん
ありがとうございます。
今後ともよろしくお願いいたします。
そして、このフォーラムに感謝いたします。
風呂好き