В функциях обработок отчетов может возникнуть необходимость сохранить исходный файл со множеством обработанных и расчетных листов в разные файлы (например в макросе комплексной обработки). Сохранение части данных осуществляется путем удаления лишних листов, сохранения файла с нужным именем и отменой удаления этих листов.
Рассмотрим код одного из таких макросов. Из файла Данные для проводок нам нужно получить файл Название ГМ дата списания:
Sub Sox
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oSheet = ThisComponent.createInstance ("com.sun.star.sheet.Spreadsheet")
'Удаляем из файла Данные для проводок ненужные листы
ThisComponent.Sheets.removeByName ("Списание ингредиентов ГМ", oSheet)
ThisComponent.Sheets.removeByName ("Списание ингредиентов АР", oSheet)
ThisComponent.Sheets.removeByName ("Питание персонала", oSheet)
ThisComponent.Sheets.removeByName ("Производство", oSheet)
ThisComponent.Sheets.removeByName ("Производство АР", oSheet)
ThisComponent.Sheets.removeByName ("Данные для проводок", oSheet)
' Вызываем стандартную функцию сохранения файла с нужным именем
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
GlobalScope.BasicLibraries.LoadLibrary("Tools")
End If
oDoc = ThisComponent
sDocURL = oDoc.getURL()
Puti = DirectoryNameoutofPath(sDocURL,"/")
dim args17(2) as new com.sun.star.beans.PropertyValue
args17(0).Name = "URL"
args17(0).Value = Puti & "/" & ThisComponent.Sheets (0).getCellByPosition(0, 0).String & " списания .xls"
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args17())
'Вызываем функции отмены удаления листов, каждая строчка удаляет одно действие
'Так как мы удалили шесть листов строчек тоже будет шесть
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
oSheet = ThisComponent.createInstance ("com.sun.star.sheet.Spreadsheet")
'Далее мы будем вызывать из файла данные для проводок другие обработки сохранения
'Будут удаляться другие листы.
Sox2
Sox3
End sub
Задача: в любом созданном ранее макросе допишите к конец главного макроса строчки
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
Данный код будет вызывать отмену трех последних действий - проверьте результат.
Рассмотрим код одного из таких макросов. Из файла Данные для проводок нам нужно получить файл Название ГМ дата списания:
Sub Sox
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oSheet = ThisComponent.createInstance ("com.sun.star.sheet.Spreadsheet")
'Удаляем из файла Данные для проводок ненужные листы
ThisComponent.Sheets.removeByName ("Списание ингредиентов ГМ", oSheet)
ThisComponent.Sheets.removeByName ("Списание ингредиентов АР", oSheet)
ThisComponent.Sheets.removeByName ("Питание персонала", oSheet)
ThisComponent.Sheets.removeByName ("Производство", oSheet)
ThisComponent.Sheets.removeByName ("Производство АР", oSheet)
ThisComponent.Sheets.removeByName ("Данные для проводок", oSheet)
' Вызываем стандартную функцию сохранения файла с нужным именем
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
GlobalScope.BasicLibraries.LoadLibrary("Tools")
End If
oDoc = ThisComponent
sDocURL = oDoc.getURL()
Puti = DirectoryNameoutofPath(sDocURL,"/")
dim args17(2) as new com.sun.star.beans.PropertyValue
args17(0).Name = "URL"
args17(0).Value = Puti & "/" & ThisComponent.Sheets (0).getCellByPosition(0, 0).String & " списания .xls"
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args17())
'Вызываем функции отмены удаления листов, каждая строчка удаляет одно действие
'Так как мы удалили шесть листов строчек тоже будет шесть
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
oSheet = ThisComponent.createInstance ("com.sun.star.sheet.Spreadsheet")
'Далее мы будем вызывать из файла данные для проводок другие обработки сохранения
'Будут удаляться другие листы.
Sox2
Sox3
End sub
Задача: в любом созданном ранее макросе допишите к конец главного макроса строчки
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
Данный код будет вызывать отмену трех последних действий - проверьте результат.
Комментариев нет:
Отправить комментарий