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を今後とも、楽しく使わせていただこうと
思っています。

コジマさん
ありがとうございます。
今後ともよろしくお願いいたします。
そして、このフォーラムに感謝いたします。

     風呂好き