FC2ブログ
QLOOKアクセス解析

DTPを快適に!

なにかと短時間作業を強いられることの多いDTPの仕事。この苦しみから少しでも解放されたい思いで、只今勉強中!javascript、applescriptの習得を中心にその他のチップス、素材のことなんかを書いていきます。

2010年04月の記事

OpenOfficeでマクロに再挑戦

EXCEL入稿

DTPの仕事をしていると、原稿をEXCELデータでの入稿ということが多々あります。
年々増える傾向にありますね。

EXCELで原稿を入れていただけるとコピペですむので、手書きの原稿に比べとっても楽ちんです。
 楽ちん1、もちろんキーボードで打つ手間ながいらない。
      コピペや流し込みが可能!

 楽ちん2、打ち間違いが無い。
      これが大きい。この仕事では打ち間違いが一番こわいですから。
      もし、EXCEL原稿自体が間違っていても原稿のせいに出来るので(でも、ちゃんと内校しないと)


そんなEXCEL原稿ですが、DTPでそのまま使うにはどうだろう?というデータが多々あります。
そんな代表格が半角カタカナです。半角カタカナはスペース的には小さくてすむのですが、なかなかかっこ悪い。
でも数字は半角がいい。

私のmacにはexcelが入っていません。経費節減でもっぱらopenofficeです。(またはneooffice)
windowsノートもあり、そちらにはEXCELが入ってます。

EXCELでVBAというマクロが使えるので、マクロを使って半角全角を変更するマクロを作って、使っていました。

なのでEXCELデータが入稿したら、winノートにデータを移して、マクロで変換、macに移すという作業をしていました。
たいした手間でもないですが、面倒です。macだけで完結したい。
openofficeにもOpenOffice.org Basicというマクロがありますが、マイクロソフトのofficeVBAとはなかなか互換が難しい。

OpenOfficeでマクロ

そんなわけで、3年ほど前でしょうか、OpenOffice.org Basicに挑戦したことがあります。
しかし、その頃ネットでいろいろ調べてみたんですが、情報がなかなか出てこない。
でてきたのはOpenOfficeのもとになったサンマイクロシステムズのStarOfficeのStarSuite Basicというマクロのリファレンス的な物。しかも英文。
色々試しましたが途中で挫折してしまいました。

ちなみにOpenOfficeのOpenOffice.org Basic、StarOfficeのStarSuite Basic、NeoOfficeのNeoOffice Basicは互換性があるようです。

最近になって、再度挑戦してみようと思いネットで調べると、以前とは異なり情報が色々と出てきます。
OpenOfficeが浸透してきたしょうこですね。

というわけで、皆さんの情報をたよりに、マクロを作ってみました。

今回、半角にするのは
ユニコードで65281~65370までの文字。
つまり
!?#$%&?()*+,-./:;<=>?@[\]^_`
の記号と
A~Za~zのアルファベットと0~9の数字

それ以外は全角としました。

Sub hankaku

Dim oRange As Object
Dim SC As integer
Dim EC As integer
Dim SR As integer
Dim ER As integer
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim Rowscount As integer
Dim Colscount As integer

dim MojiSu as integer
dim Moji as string
dim Mojigo as string
dim Mojihen as string
dim I1,I2,I3,I4 as integer
dim ac as integer

Doc = StarDesktop.CurrentComponent
Sheet =Doc.CurrentController.ActiveSheet


oRange = Doc.CurrentSelection.getRangeAddress

SC = oRange.StartColumn
EC = oRange.EndColumn
SR = oRange.StartRow
ER = oRange.EndRow

Rowscount = ER - SR + 1
Colscount = EC - SC + 1



for I1=SC to EC
for I2 =SR to ER


Cell = sheet.getCellByPosition(I1,I2)


moji = cell.string


Moji = StrConv(Cell.string, 4)

mojisu = len(moji)

mojigo = ""



for I3 =1 to mojisu
if (asc(Mid(moji,I3,1))<65281 or asc(Mid(moji,I3,1))>65370) then

mojihen = Mid(Moji,I3,1)

else

mojihen = StrConv(Mid(moji,I3,1),8)

end if


mojigo= mojigo + mojihen

next I3


cell.string = mojigo

next I2
next I1

全角半角処理をしたいセルを選択して、このマクロを実行すると変換してくれます。
連続したセルをいっぺんに変換可能です。
行や列の選択、連続しない複数セルの選択はできません。

マクロ内の処理は、一度ぜーんぶ全角にして
  StrConv(Cell.string, 4)
その後、ユニコードで65281~65370までの文字を1文字ずつ、半角に変換しています。
  StrConv(Mid(moji,I3,1),8)

まだあまり試していないので、バックアップをとって、よーく確認しながら使って下さい。
思わぬ落とし穴があるかもしれません。
校正、内校の際は、変換前のデータでお願いします。

neoofficeでも実行できました。
私の場合はmac osxですが、windowsでも使えると思います。


だいぶopenofficeも資料が出てきて、いい環境になってきましたね。

でも、やっぱりレイアウトの崩れなんかもあったりして、お客様にはexcelで作ったデータで返すようにしてるんですけどね…難しいところです。

今回OpenOfficeのマクロをはじめて作った初心者なのですが、今後はもう少しこった物もつくってみたいですね。


スポンサーサイト