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

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

ただいまの
回答率

88.05%

openOfficeBasicのmacroをphpから起動させたい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,454

score 6

 前提・実現したいこと

お世話になります。

web経由(php)で、openOfficeBasicのMacroでファイルを作成したいです。

現在、ターミナルのコマンドラインのphpでは成功しています。
なので、コードの問題というよりは、apacheのセキュリティなどの問題で
web経由ではmacro実行はできないのかなと思っております。

もし回避できる方法がありましたら、ご教示ください。

centos7
apache 2.4.6
php 7.0.25
LibreOffice 5.0.6.2(soffice.bin)

 発生している問題

ファイルを作成するテストプログラムにて、

・ターミナルのコマンドラインではphp実行でファイルが作成されます。
$ php test.php ⇒ ファイルが作成できる

・web経由では作成されません。
httpd://XXX/test.php ⇒ ファイルが作成できない

 試したこと

SELinuxは無効です。
ファイルを作成するフォルダを0777にしてみてもダメでした。
「Module1.xba」を0755にしてみてもダメでした。
shellでは、管理者権限実行にしても変化無しでした。
openOfficeコマンドのpdfへの変換は、web経由でもファイルが作成されました。

 該当のソースコード

※ shellをかましているのは、PHPから直接openOfficeコマンドが使えなかったためです。

test.php

// 引数はshellへ渡っているかの確認用なので意味はないです
$cmd='/usr/bin/bash openoffice_basic_macro_boot.sh calc.xls';    
echo $cmd;

$results = exec($cmd);
echo "<pre>$results</pre>";


shell ( openoffice_basic_macro_boot.sh )

#!/bin/bash
echo $1
pass="XXXXXXX"
echo $pass | sudo -S /opt/libreoffice5.2/program/soffice.bin --headless "macro:///Standard.Module1.test"
# ↓これはファイルが作成されます
# export HOME=/tmp;/opt/libreoffice5.2/program/soffice.bin --headless --nologo --nofirststartwizard --convert-to pdf --outdir /var/www/html/test/tmp /var/www/html/test/calc.xls


openOfficeBasicのMacro ( Module1.xba  )

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<!--
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
-->
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Module1" script:language="StarBasic">

REM  *****  BASIC  *****
Option VBASupport 1 

・・・

Sub test
    Dim objDoc As Object
    Dim objSheet As Object
    Dim objCell As Object
    Dim strMessage As String
    Dim  inFile  As String, outFile  As String, tmpStr  As String

    Dim filepath  As String
    filepath= "/var/www/html/test/"


    inFile=ConvertToUrl( filepath+"calc1.xls")     
    objDoc = StarDesktop.loadComponentFromURL(inFile, "_hidden", 0, Array())

    objSheet = ThisComponent.Sheets.getByName("TEST_02")
    objSheet.getCellRangeByName("B6").Value=objSheet.getCellRangeByName("B6").Value
    objSheet.getCellRangeByName("A1").String= "セルへの書き込み"
    outFile=ConvertToUrl(  filepath+"calc_to.xls"  ) 

    Dim lProperties(0) = New com.sun.star.beans.PropertyValue
    lProperties(0).Name  = "Overwrite"
    lProperties(0).Value = true  
    Dim lProperties(1)=  New com.sun.star.beans.PropertyValue
    lProperties(1).Name  = "FilterName"
    lProperties(1).Value = "MS Excel 97"     

    objDoc.storeAsURL(outFile,lProperties())

    'ファイルを閉じる
    objDoc.close(True)

End Sub

・・・

</script:module>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • pirogong

    2018/05/08 10:03

    ありがとうございます!サーバーの変更は難しいですね。。。仕方ないのでマクロ付きファイルにデータを出力してダウンロードさせ、起動時に動作する方向性を考えています。

    キャンセル

  • kenkbou

    2018/05/09 20:50

    遅くなってすみません、、マクロを書いたりする方法もあるのですね、勉強になりますmm

    キャンセル

  • pirogong

    2018/05/10 09:07

    あ、いえいえ。言葉が足りなかったかも知れません。サーバー側で出来ないのでクライアント側でVBAを処理させようとしているだけです。VBA付きexcelファイル(*.xlsm)をサーバー側にテンプレートとして保存しておいて、PHPExcelでデータを書き込んでダウンロードさせます。起動時に必要なvbaを起動して(*.xlsx)ファイルで保存して本体(*.xlsm)を削除しようと思っています。

    キャンセル

回答 1

+1

コードの問題かと。
パスの指定ができていないと思われるので、openoffice_basic_macro_boot.sh
をフルパスで記述してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/01 10:24

    ありがとうございます。
    sh内部のコマンドをsofficeの別のオプション(PDF変換)に変更すると、web経由でもファイルが作成できます。
    sofficeのmacro呼び出しオプションも、コマンドラインでの実行はファイル作成できます。

    なので、php、sh、web経由自体には問題がないかと思います。
    web経由のsofficeのmacro呼び出しだけが失敗します。

    その状態に対して、影響しそうな環境変数はどのようなものがあるでしょうか。

    もしくはOpenOfficeBasic(macro)で、外部からの呼び出しを許諾するような隠れセキュリティ設定などがあって、変更できると良いのですが。(検索した限りではそのような設定は見つかりませんでした)

    キャンセル

  • 2018/02/01 10:36

    > openOfficeコマンドのpdfへの変換は、web経由でもファイルが作成されました。

    これを見落としていました。
    sh の呼び出しまでは、Web 経由でも問題ないということですね?

    では apache 権限での sh ファイルの挙動に問題があると思います。
    openOffice コマンドはよく分かりませんが、パスか権限の問題を中心に確認してみては?

    キャンセル

  • 2018/02/01 10:52

    はい。
    おっしゃる通りpdfへの変換はweb経由でOKなので、パスか権限の問題が
    あるとすれば、(web経由の場合の)Macroに対してかと思います。

    権限は、「Module1.xba」を0755にしても変化がなかったので、
    (macroはopenofficebasicの内部ファイルなので違うかもしれませんが)
    macroの指定をフルパスに出来る方法を探してみます。

    te2jiさん、ありがとうございます。
    もう少し、皆さまからのご回答を待ちたいと思います。
    また何かありましたらご助言をお願いいたします。

    キャンセル

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

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る