Доброго времени суток.

Делал интеграцию с хранилищем SharePoint(далее SP). А именно реализовал простой экспорт и импорт файлов.

На деталь "Файлы и ссылки" добавляется файл. Он сразу же уходит в SP.

В своём классе реализовал два метода ReadAsync и WriteAsync интерфейса IFileContentStorage.

Всё работает. Файлы экспортируются в SP и импортируются. Но есть проблема с офисными файлами.

А именно с xlsx, xls, docx, doc, pptx. Возможно проблемы и с офисными файлами других расширений. Не проверял.

Файлы с этими расширениями уходят в SP. Но если их обратно прочитать, то они уже приходят битыми.

То есть при открытии появляется следующее сообщение:

Ошибка в части содержимого в книге. Выполнить попытку восстановления? Если вы доверяете источнику, из которого получена книга, нажмите кнопку "Да". 

Если нажать "Да", то открывается страница Excel или Word с сообщением, что "Excel или Word удалось открыть файл, восстановив или удалив нечитаемое содержимое".

После нажатия "Да", файл может быть полностью восстановлен, а может открыться пустым. Если выгрузить файлы, которые пришли в SP, напрямую из хранилища(нажать "Download" на странице SP), то они открываются без ошибок.

С файлами других расширений подобных проблем нет. Графические файлы, текстовые, pdf - всё отлично.

Для реализации импорта и экспорта пробовал использовать HttpWebRequest,  RestClient, HttpClient. Результат один и тот же.

Для эксперимента создал консольное приложение, где применил те же способы экспорт и импорта. Только добавил сохранение полученного из SP значения Stream в файл на диск. Файл открылся без ошибок.

Не пойму, почему при реализации метода ReadAsync, который возвращает Task, появляются подобные проблемы. Может кто-то реализовывал подобное и тоже сталкивался с такими ошибками?

 

Нравится

1 комментарий

Добрый день!

Боюсь, что не сможем помочь с данной проблемой так как мы не работаем с хранилищем SharePoint и поэтому не знаем его особенностей.

Логично предположить, что проблема возникает именно при экспорте из SP. Возможно нарушился поток передачи и как результат файл пришёл неполный.

На маркетплейсе есть коннектор к SP от сторонних разработчиков и там можно найти небольшую документацию по реализации, возможно она вам поможет.

Показать все комментарии

Коллеги, добрый день.

Подскажите возможен ли экспорт реестра данных в формат xls и/или xlsx.

Нравится

1 комментарий

Здравствуйте, Евгений!

В текущей реализации приложения экспорт возможен только в формат *.csv, но реализация экспорта в *.xlsx запланирована на версию 7.12.

Показать все комментарии

Здравствуйте!
Подскажите пожалуйста как реализовать возможность экспорта отчета FR в xlsx. Доступно только xls, хоть в программе и прописаны все версии офиса. По большей части нужно для автоматического формирования и сохранения отчета. Если указывать в названии файла расширение xlsx - файл создается, но не открывается (((( На скрине - пользовательский экспорт отчета в Microsoft Excel.
Версия ТС - 3.4.0.38.
Спасибо!

Нравится

7 комментариев

Светлана, используемый в Terrasoft движок FastReport является сторонним компонентом, влиять извне на его работу не всегда есть возможность. Если он не поддерживает сохранение в XLSX, то нельзя.

Можно попробовать следующие обходные решения:

  • Сохранять файл в XLS, потом отдельно конвертировать файлы с помощью Microsoft OFC.
  • Полностью переписать построение отчёта, вместо FastReport использовать чисто программное формирование при помощи COM-объекта Excel, там можно и XLSX.

"Зверев Александр" написал: Если он не поддерживает сохранение в XLSX, то нельзя.

Судя по форумам, вполне поддерживает. Возможно, вопрос в используемой версии в TS

Печально(( движок FR тоже ведь не заменить?
Спасибо!

В Terrasoft встроена конкретная версия движка. Возможно, по ссылке более новая.

Версия FR 4.10.18

А Владимир привёл ссылку на 5.5.9.

Менять встроенный движок нельзя.

Показать все комментарии

Здравствуйте! Я в террасофте совсем новичок, только начинаю изучать. Версия ТС - 3.4.0.38. По форуму искала, вроде подходящего решения не нашла, либо не поняла что это "оно". Подскажите пожалуйста!
Была поставлена задача - по расписанию формировать файл с отчетом для Excel (есть аналог для работы пользователя в FR), выкладывать его в сеть и отправлять группе лиц.
Вроде как все решила через SQL, правда экселевский файл сформировала через spread xls на xml.
Несущественная проблема - при открытии на некоторых компьютерах ругается на несоответствие формата, с этим можно жить, но вот на телефонах этот файл не открывается в приложениях, но очень нужно.
В итоге встал вопрос о другом формате.. Возможно ли как то через sql или сам террасофт выполнить по расписанию формирование файла в формате xlsx или pdf (редактируемый)? Либо конвертацию сделать, может что-то вроде - открыть файл в sql через sp_OACreate 'Excel.Application', и сохранить его в xlsx..

Нравится

4 комментария

С помощью Terrasoft, также можно выполнить такую задачу, для этого необходимо на сервер создать задачу (Task Scheduler), которая будет запускаться по времени и вызывать Terrasoft командой TSClient.exe /wnd=wnd_ExportRep.

Где в окне wnd_ExportRep будет прописана логика экспорта.
Обратите внимание на сервисы scr_MSExcelLibrary, scr_MSExcelLibraryConsts, а также на сервис scr_UserReportCommon, в особенности на функцию GetExcelObject - которая возвращает Com объект на Excel.

Также можно изучить работу сервиса scr_ImportExcelWizardUtils, который автоматически создает отчеты в Excel, на основании его работы можете создать свой экспорт.

Хороший вариант! Спасибо! Правда мне очень много стоит изучить для реализации подобного..
А клиент терры будет открыватся на сервере или только процесс висеть? Если есть возможность подсказать подобные примеры решения буду очень признательна.

Пробовала запускать excel на террасофте через var ExcelApp = new ActiveXObject("Excel.Application");
но система выругалась на меня и клиент вылетел..

Можете взять мой пример запуска коннектора и создание Excel файла.
Алгоритм следующий:
1. Создайте файле с расширением js
2. Пропишите в нем следующий код:

function WSLog(LogText) {
	WScript.stdout.WriteLine(LogText);
}
 
function GetExcelObject() {
	var Excel = new ActiveXObject('Excel.Application');
	var Excel_wb = Excel.Workbooks.Add();
	Excel.Sheets(1).Name = "Данные";
	var SheetsCount = Excel.Sheets.Count;
	for (var i = 2; i <= SheetsCount; i++) {
		Excel.Sheets(2).Delete();
	}
	Excel.Visible = false;
	return Excel;
}
 
function Main() {
	var args = WScript.arguments;
	var ConfigurationName = "TS_3.4.1.113_XRM_SD_SoftKey_ENU_Tereshchuk";
	var AuthenticationMode = 1; //1 - DatabaseServer, 0 - Windows
	var UserName = "Supervisor";
	var UserPassword = "";
	var ExcelFileName = 'C:\\Temp\\TestExcel.xlsx';
	WSLog("Start!");
	var Connector =  new ActiveXObject('TSObjectLibrary.Connector');
	var Config;
	if (AuthenticationMode) {
		Config = Connector.OpenConfigurationByName(ConfigurationName, AuthenticationMode, UserName, UserPassword);
	} else {
		Config = Connector.OpenConfigurationByName(ConfigurationName, AuthenticationMode);
	}
	var Excel = GetExcelObject();
	Excel.Sheets(1).SaveAs(ExcelFileName);
	Excel.Visible = true;
	Connector.Logoff();
	WSLog("Finish!");
}
 
Main();

3. Создайте файл с расширением bat и пропишите в нем код:
%WinDir%/SysWOW64/cscript.exe /d D:\Projects\JS\RunTS.js

4. Запустите bat файл

Исходники: js.zip

Спасибо!
Так как задача была горящей, а 'Excel.Application' наотрез отказывается работать, временно решила через excelcnv.exe. Там правда очень много нюансов, за счет чего код получился совсем извращенным, но главное рабочим.. позже вернусь к приведению в нормальный вид ) попробую все-таки решить через террасофт по #1 предложенному ответу.

Показать все комментарии