Почему функция VBA не работает с PHP 7?

Я только что обновил свое веб-приложение с PHP 5.XXX до PHP 7.4.28.

Я решил большинство проблем до сих пор, но я застрял в функции VBA (DCOM), которая, по-видимому, больше не распознается:

$myTable->Range->InsertBreak(8);

Где «8» означает wdColumnBreak.

Не могли бы вы сообщить мне, есть ли какой-либо альтернативный синтаксис, чтобы этот разрыв столбца работал правильно?

Любые предложения действительно ценятся, Большое тебе спасибо

так в чем ошибка?

bankeris 31.03.2022 13:05

Привет, спасибо за ваш ответ. Ошибка следующая: "Фатальная ошибка: Uncaught com_exception: Источник: Неизвестно Описание: Неизвестно" Если я прокомментирую эту строку, Word будет сгенерирован правильно (но без разрыва столбца форматирование испорчено). Спасибо

ducky 31.03.2022 14:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В статье Рекомендации по автоматизации офиса на стороне сервера говорится следующее:

Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.

If you are building a solution that runs in a server-side context, you should try to use components that have been made safe for unattended execution. Or, you should try to find alternatives that allow at least part of the code to run client-side. If you use an Office application from a server-side solution, the application will lack many of the necessary capabilities to run successfully. Additionally, you will be taking risks with the stability of your overall solution.

Вместо этого я бы предложил выбрать компоненты, предназначенные для выполнения на стороне сервера. Также вы можете взглянуть на Пакет SDK для открытого XML, если вы имеете дело только с открытыми XML-документами.

Здравствуйте, Евгений, спасибо за ответ. Я понимаю, что Microsoft не рекомендует это решение, к сожалению, мое приложение полностью основано на документах Word, созданных с помощью DCOM через PHP. Я не могу приложить усилия, чтобы столкнуться с такими большими изменениями прямо сейчас, все, что мне нужно, это просто быстрый обходной путь, чтобы заставить разрыв столбца работать правильно, это не должно быть идеальным или элегантным решением... Большое спасибо

ducky 31.03.2022 17:50
Ответ принят как подходящий

Попробовав некоторое время, я смог найти следующее решение:

$myNumber= new VARIANT(8, VT_I4);
$MyTable->Range->InsertBreak($myNumber);

В основном параметр функции InsertBreak следует рассматривать как вариант, а не как числовой. С этим синтаксисом все работает отлично.

Я очень хотел поделиться этим решением, потому что мне не нравится подход "эта технология больше не рекомендуется, просто выберите последнюю версию"... Не всегда так просто перейти на новые технологии (даже не имея гарантии их надежности).

Ваше здоровье

Другие вопросы по теме