Eksport Tabeli do oddzielnego pliku
Eksport Tabeli do oddzielnego pliku
Witam, czy istnieje możliwość, w makro libre office, wyeksportowania tabeli do osobnego pliku? Zależy mi na funkcjonalności w której po naciśnięciu przycisku formantu (utworzyłem przycisk który wywołuje procedure w makro) uruchomi okno do wybrania miejsca zapisu pliku z tabelą do oddzielnego pliku.
Win 10
LibreOffice 7.1.3.2 x64
LibreOffice 7.1.3.2 x64
Re: Eksport Tabeli do oddzielnego pliku
Wykonuję taką procedurę:
Zastanawiam się tylko jakie parametry filtra PropertyValue muszę wybrać, aby plik csv eksportował się z zachowaniem wszystkich formatowań?
Kod: Zaznacz cały
Sub importTabeli
Dim sURL As String ' URL of current spreadsheet
Dim FileN As String ' URL of target CSV-file
Dim oCurrentController As Object ' Before save - activate sheet sSheetName
Dim storeParms(2) as new com.sun.star.beans.PropertyValue
Const sSheetName = "Gotowa Tabela"
GlobalScope.BasicLibraries.LoadLibrary("Tools") ' Only for GetFileName
sURL = thisComponent.getURL()
If Not thisComponent.getSheets().hasByName(sSheetName) Then
MsgBox ("Arkusz """ & sSheetName & """ Nie został znaleziony")
Exit Sub
EndIf
FileN = thisComponent.getSheets().hasByName(sSheetName).getCellByPosition(3,3) & ".csv" ' For Data.ods it will be Data.csv
'GetFileNameWithoutExtension(sURL)
REM Options to StoreTo:
storeParms(0).Name = "FilterName"
storeParms(0).Value = "Text - txt - csv (StarCalc)"
storeParms(1).Name = "FilterOptions"
storeParms(1).Value = "9,34,,65535,1,,0,true,true,true"
REM About this string see https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options
storeParms(2).Name = "Overwrite"
storeParms(2).Value = True
REM Activate sheet for export - select "DataSheet"
thisComponent.getCurrentController().setActiveSheet(thisComponent.getSheets().getByName(sSheetName))
REM storeToURL can raises com.sun.star.io.IOException! Only now:
On Error GoTo Errorhandle
REM Export
thisComponent.storeToURL(FileN,storeParms())
MsgBox ("Nie znaleziono błędów, plik został zapisany : """ + ConvertFromUrl(FileN) + """.")
Exit Sub
Win 10
LibreOffice 7.1.3.2 x64
LibreOffice 7.1.3.2 x64
Re: Eksport Tabeli do oddzielnego pliku
Zakładam, że skopiowany obszar ma być też arkuszem Calc.
Jeśli chodzi o wyeksportowanie tabeli do nowego dokumentu (przez tabelę rozumiem jakiś wybrany obszar w arkuszu), to potrzebne są cztery kroki.
Makro nosi nazwę NowyPlik() i wywołuje dwa moduły: moduł kopiowanie i moduł zapisywania.
Moduł kopiowania otwiera nowy pusty plik Calca i kopiuje do niego określony zakres komórek. Kopiowanie obejmuje tylko wartości i formatowanie. Nie są kopiowane formuły. To makro kopiuje zakres B1:D8 z arkusza źródła do obszaru zaczynającego się w komórce D3 nowego pliku.
Moduł zapisywania żąda wskazania folderu, w którym plik ma zostać zapisany oraz podania nazwy pliku. Po zapisaniu pliku następuje jego zamknięcie i przywracany jest aktywny arkusz pliku źródłowego.
Jeśli chodzi o wyeksportowanie tabeli do nowego dokumentu (przez tabelę rozumiem jakiś wybrany obszar w arkuszu), to potrzebne są cztery kroki.
- Utworzenie nowego pustego dokumentu.
- Przekopiowanie wybranego obszaru na wskazane miejsce w tym nowym dokumencie.
- Zapisanie dokumentu w wybranym folderze pod własną nazwą.
- Zwolnienie nowo utworzonego dokumentu
Makro nosi nazwę NowyPlik() i wywołuje dwa moduły: moduł kopiowanie i moduł zapisywania.
Moduł kopiowania otwiera nowy pusty plik Calca i kopiuje do niego określony zakres komórek. Kopiowanie obejmuje tylko wartości i formatowanie. Nie są kopiowane formuły. To makro kopiuje zakres B1:D8 z arkusza źródła do obszaru zaczynającego się w komórce D3 nowego pliku.
Moduł zapisywania żąda wskazania folderu, w którym plik ma zostać zapisany oraz podania nazwy pliku. Po zapisaniu pliku następuje jego zamknięcie i przywracany jest aktywny arkusz pliku źródłowego.
Kod: Zaznacz cały
Dim Dummy()
Dim oDoc1, oDoc2
Sub NowyPlik()
Kopiowanie()
Zapisz()
End Sub
Sub Zapisz
Cz1= GetPath
sPlik=InputBox ("Podaj nazwę pliku z rozszerzeniem","Określenie nazwy pliku")
sZapis= Cz1 & sPlik
oDoc2.StoreAsURL(ConvertToURL(sZapis), Dummy())
oDoc2.Dispose
oDoc1.getCurrentController.getActiveSheet
End Sub
Function GetPath() As String
REM funkcja zwraca adres URL wybranego folderu
Dim oPathSettings, oFolderDialog
oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
sPath = oPathSettings.Work
oFolderDialog = _
CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFolderDialog.SetDisplayDirectory(sPath)
If oFolderDialog.Execute() = _
com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
sPath = oFolderDialog.GetDirectory
Else
sPath = sDefaultPath
End If
If Right(sPath, 1) <> "/" Then sPath = sPath & "/"
getPath=ConvertToURL(sPath)
End Function
sub Kopiowanie
Dim oRange
oDoc1=ThisComponent
oDoc2=StarDesktop.loadComponentFromURL("private:factory/scalc", _
"_blank", 0, Array())
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oFrame1 = oDoc1.CurrentController.Frame
oRange = oDoc1.Sheets(0).getCellRangeByName("B1:D8")
oDoc1.CurrentController.select(oRange)
oDispatcher.executeDispatch(oFrame1, ".uno:Copy", "", 0, Array())
oRange = oDoc2.Sheets(0).getCellRangeByName("D3")
oDoc2.CurrentController.select(oRange)
oFrame2 = oDoc2.CurrentController.Frame
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVDT"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4
oDispatcher.executeDispatch(oFrame2, ".uno:InsertContents", "", 0, args4())
end sub
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Eksport Tabeli do oddzielnego pliku
Ta procedura niestety nie działa. Nie jest określone z jakim rozszerzeniem, ma się generować nowy plik. Po nadaniu rozszerzenia, plik jest uszkodzony. Być może wykorzystam cześć tego kodu, do ulepszenia swojej procedury,.
Win 10
LibreOffice 7.1.3.2 x64
LibreOffice 7.1.3.2 x64
Re: Eksport Tabeli do oddzielnego pliku
Masz wyjątkową umiejętność niewyjaśniania, co się wydarzyło. Napisanie, że nie działa, to jakby nic nienapisanie.
Plik powstał, czy nie? Jeśli powstał, to może warto byłoby go załączyć do przeanalizowania.
U mnie makro tworzy nowy plik.
Jak napisałem, makro tworzy plik programu Calc. Określając nazwę, należy podać ją łącznie z rozszerzeniem.
Nawiasem pisząc, brak rozszerzenia nie uniemożliwia otwarcia pliku. Rozszerzenie ma bowiem charakter umowny, a nie obligatoryjny. Przyjęło się stosowanie rozszerzeń związanych z konkretnym plikiem wynikowym, np. ods dla plików Calca. Po zainstalowaniu programu Calc, w systemie operacyjnym tworzone jest skojarzenie, mówiące, że rozszerzenie ods jest przypisane do wynikowego pliku programu Calc. Dzięki temu, gdy dwukrotnie kliknie się nazwę pliku, system — na podstawie utworzonego skojarzenia — wywoła program Calc, a ten w następnym kroku otworzy plik.
Jeśli najpierw wywołasz program Calc, to możesz wskazać mu do otworzenia plik z dowolnym rozszerzeniem (lub bez rozszerzenia). Program sprawdzi, czy struktura pliku jest zgodna z oczekiwaną przezeń. Jeśli jest, to plik zostanie otwarty.
Podsumowując, u mnie wszystko działa.
Co do
Sądziłem, że na tyle znasz Basic, że odpowiednio zmodyfikujesz ten fragment makra, w którym "składana" jest cała ścieżka zapisu pliku. W moim makrze okno zapytania o nazwę pliku wyraźnie informuje, żeby wpisać nazwę wraz z rozszerzeniem, czyli np. tak aaa.ods
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Eksport Tabeli do oddzielnego pliku
Oczywiście jestem w stanie to naprawić samodzielnie. Napisałem tylko informacyjnie. Nie mniej jednak przy próbie otwarcia pliku, wskazywane jest, że plik jest uszkodzony.
Win 10
LibreOffice 7.1.3.2 x64
LibreOffice 7.1.3.2 x64
Re: Eksport Tabeli do oddzielnego pliku
Załączam ci wobec tego mój plik testowy.
- Załączniki
-
- Nowy plik.ods
- (12.68 KiB) Pobrany 50 razy
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Eksport Tabeli do oddzielnego pliku
Zauważyłem że plik da się normalnie otworzyć, natomiast... przy otwieraniu otrzymuje komunikat:
1.PNG
Następny komunikat to :
2.PNG
Tylko po nacisnieniu "Nie" w pierwszym komunikacie, plik pomimo następnego komunikatu, otwiera się poprawnie.
1.PNG
Następny komunikat to :
2.PNG
Tylko po nacisnieniu "Nie" w pierwszym komunikacie, plik pomimo następnego komunikatu, otwiera się poprawnie.
- Załączniki
-
- 2.PNG (4.59 KiB) Przejrzano 1429 razy
-
- 1.PNG (13.75 KiB) Przejrzano 1429 razy
Win 10
LibreOffice 7.1.3.2 x64
LibreOffice 7.1.3.2 x64
Re: Eksport Tabeli do oddzielnego pliku
Jak zrozumiałem, otworzyłeś załączony mój plik i wywołałeś makro NowyPlik. Nadałeś nazwę brbr.ods.
Czyli w pliku brbr.ods przekopiowane dane zaczynają się w komórce D3. Jeśli tak, to u mnie akurat wszystko przebiega OK. Mam także LO 64-bitowe, tylko że wersji 7.5.9. Sprawdziłem także działanie na wersji 24.2.1 i wszystko działa prawidłowo.
Nie rozumiem tych komunikatów.
Czyli w pliku brbr.ods przekopiowane dane zaczynają się w komórce D3. Jeśli tak, to u mnie akurat wszystko przebiega OK. Mam także LO 64-bitowe, tylko że wersji 7.5.9. Sprawdziłem także działanie na wersji 24.2.1 i wszystko działa prawidłowo.
Nie rozumiem tych komunikatów.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Eksport Tabeli do oddzielnego pliku
Potwierdzam opinię @Jermor-a.
Po otwarciu dokumentu "Nowy plik.ods" i uruchomieniu zapisanego w nim makropolecenia NowyPlik powstaje plik o nadanej interaktywnie nazwie, będący poprawnym dokumentem Calca o zawartości zgodnej z opisem.
Nie udało mi się odtworzyć zachowania sygnalizowanego przez @Altaro.
Testowałem na LibreOffice 6.2.8 z 32-bitowej instalacji Linux/rpm oraz na 7.5.9 z 64-bit Linux/rpm. Ale to nie powinno mieć znaczenia.
Po otwarciu dokumentu "Nowy plik.ods" i uruchomieniu zapisanego w nim makropolecenia NowyPlik powstaje plik o nadanej interaktywnie nazwie, będący poprawnym dokumentem Calca o zawartości zgodnej z opisem.
Nie udało mi się odtworzyć zachowania sygnalizowanego przez @Altaro.
Testowałem na LibreOffice 6.2.8 z 32-bitowej instalacji Linux/rpm oraz na 7.5.9 z 64-bit Linux/rpm. Ale to nie powinno mieć znaczenia.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Eksport Tabeli do oddzielnego pliku
U mnie nawet przestała się teraz wykonywać kopia. Dziwne rzeczy.
Win 10
LibreOffice 7.1.3.2 x64
LibreOffice 7.1.3.2 x64
Re: Eksport Tabeli do oddzielnego pliku
To zrób obrazek-screenshot z widocznym komunikatem o niepowodzeniu i załącz.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Eksport Tabeli do oddzielnego pliku
Może zaktualizuj program do najnowszej stabilnej wersji. Obecnie jest to wersja 7.6.6. Nie instalowałem u siebie aktualizacji do 7.6, bo kilka tygodni temu toczyła się na forum dyskusja o niepoprawnym zachowaniu pakietu LibreOffice w wersji 7.6.5. Pojawiła się jednak wersja 7.6.6 i nie pojawiły się głosy o problemach.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Eksport Tabeli do oddzielnego pliku
Niestety nie jestem w stanie powiększyć wersji. Komputery w firmie mają zainstalowaną wersję 7.1.3
Win 10
LibreOffice 7.1.3.2 x64
LibreOffice 7.1.3.2 x64
Re: Eksport Tabeli do oddzielnego pliku
Wyjaśnij, co przez to rozumiesz. Czy dostajesz jakiś komunikat, czy po prostu nie możesz jej znaleźć na dysku?
Jeśli — niechcący — kliknąłeś "Wybierz folder" bez wskazywania konkretnego, to plik zapisze się w folderze moje dokumenty i tam go nalezy szukać.
Jeśli nie podałeś nazwy, pojawi się błąd wykonania makra.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Eksport Tabeli do oddzielnego pliku
Plik się generuje, lecz przy próbie otwarcia, powtarzają się powyższe komunikaty, zaś plik jest pusty.
Win 10
LibreOffice 7.1.3.2 x64
LibreOffice 7.1.3.2 x64
Re: Eksport Tabeli do oddzielnego pliku
Może warto uczulić administratora waszych komputerów (sieci?), żeby regularnie aktualizował oprogramowanie do najnowszej wersji. 7.1.3 to wersja z maja 2021 roku. Ponadto nie należy za bardzo ufać wersjom, które na trzeciej pozycji indeksu mają liczbę mniejszą niż 4. Przyjmuje się bowiem, że dopiero od indeksu 4 pakiet jest stabilny.
Sprawdź również, czy makro da się poprawnie wykonać na innym komputerze. Będzie wówczas wiadome, czy problem jest lokalny (na twoim komputerze) czy globalny (na wszystkich komputerach w firmie).
Sprawdź również, czy makro da się poprawnie wykonać na innym komputerze. Będzie wówczas wiadome, czy problem jest lokalny (na twoim komputerze) czy globalny (na wszystkich komputerach w firmie).
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.