Экспорт XSD схемы из файла MS Excel

12 0

Если вы используете механизм генерации отчетов на основе XSD схем Excel шаблона, то вы, вероятно, сталкивались с проблемой, когда нужно добавить поля в XSD схему, но у вас есть только документ-шаблон в системе Directum, а самой XSD схемы у вас нет. Ранее, в подобных ситуациях, приходилось заново создавать схему, так как Excel не позволяет экспортировать её. Предлагаю пример сценария для экспорта XSD схемы из шаблона.

// Экспорт документа
Search = Searches.Load('EDOCUMENT_SEARCH') 
Criteria = Search.SearchCriteria.Add('ISBEDocEditor')
Criteria.Add('EXCEL')
Search.Show(ssmSelect; False)
CancelMessage = 'Экспорт не будет выполнен.' 
Assert(Assigned(Search.SelectedContents); CancelMessage)
EDoc = Search.SelectedContents.Value
Version = ServiceFactory.GetEDocumentVersionListDialog(EDoc).Select
Assert(Assigned(Version); CancelMessage)
VersionNum = Version.Number
TempFile = Format('%s\Export_%s.xls'; ArrayOf(GetTempFolder(); EDoc.ID))
ExportDlg = ServiceFactory.GetExportSingleEDocumentDialog(EDoc; VersionNum; False; TempFile)
ExportDlg.Execute()

// Выбор папки в файловой системе
FolderDialog = CreateFolderDialog()
FolderDialog.Title = 'Выбор папки для экспорта'
Assert(FolderDialog.Execute(); CancelMessage)

// Экспорт схем
Excel = CreateObject("Excel.Application")
Book = Excel.WorkBooks.Open(TempFile)
i = 1
while i <= Book.XmlMaps.Count
XmlMap = Book.XmlMaps(i)
Schema = Format('%s%s'; ArrayOf(CR; XmlMap.Schemas(1).Xml))
XSDFile = Format('%s\%s.xsd'; ArrayOf(FolderDialog.Result; XmlMap.Name))
ФайлЗаписать(XSDFile;; Schema) 
i = i + 1
endwhile

Book.CLose()
Excel.Quit()
Book = nil
Excel = nil
DeleteFile(TempFile)

ShowMessage('Схемы экспортированы.')

 

PS. В качестве бонуса приложение которое умеет заменять XSD схемы в файле. Удобно если у вас большой отчет и нет времени расставлять связи заново, лишь для того чтобы добавить пару полей. Пример использования:

xsd.exe -v replace <Путь до Excel файла> <Имя карты для замены> <Путь до XSD файла с новой схемой>

 

12
Авторизуйтесь, чтобы оценить материал.
2
Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий