Создайте новый txt/html файл для каждой строки в электронной таблице OOO Calc
Я хотел бы создать новый текстовый файл (действительно HTML-файл) из каждой строки электронной таблицы Calc. Я нашел несколько ответов, которые делают это из электронной таблицы Excel, но они не работают с Calc.
У меня нет Excel. Я использую ООО 4.
Я пробовал этот макрос Excel в Calc, но получаю ошибку - Range - неизвестный тип данных. Исследование этого говорит о том, что макросы Excel не будут хорошо работать в ООО Calc. Я нашел что-то, говорящее, что если я включил "Исполняемый код" в настройках, макросы Excel могут работать, но это не помогло. Макрос ниже предполагает только 2 столбца, я пытался заставить его работать в качестве отправной точки.
Вывод строк Excel в серию текстовых файлов
Sub Export_Files()
Dim sExportFolder, sFN
Dim rArticleName As Range
Dim rDisclaimer As Range
Dim oSh As Worksheet
Dim oFS As Object
Dim oTxt As Object
'sExportFolder = path to the folder you want to export to
'oSh = The sheet where your data is stored
sExportFolder = "C:\Disclaimers"
Set oSh = Sheet1
Set oFS = CreateObject("Scripting.Filesystemobject")
For Each rArticleName In oSh.UsedRange.Columns("A").Cells
Set rDisclaimer = rArticleName.Offset(, 1)
'Add .txt to the article name as a file name
sFN = rArticleName.Value & ".txt"
Set oTxt = oFS.OpenTextFile(sExportFolder & "\" & sFN, 2, True)
oTxt.Write rDisclaimer.Value
oTxt.Close
Next
End Sub
Мой лист имеет несколько столбцов (мы можем сказать 6 для примера). Я хотел бы назвать каждый файл со значением в столбце 1, а затем сам файл содержать содержимое каждого дополнительного столбца - каждый на новой строке. В идеале это будет работать с пустыми ячейками (будет просто пустой строкой), чтобы я мог добавлять новые пустые строки по мере необходимости для разделения материала.
На листе 400 строк, поэтому я хочу, чтобы в итоге получилось 400 файлов - по одному на каждую строку.
В электронной таблице содержится содержимое моего блога из CMS. Я запросил базу данных, чтобы получить заголовок, сводку, текст, категории и т. Д. И поместить их в электронную таблицу Excel. Поэтому часть содержимого в данной ячейке может быть очень длинной и содержать html. В нем также есть запятые и вкладки, то есть электронная таблица Excel, а не CSV.
Моя цель состоит в том, чтобы использовать отдельные файлы, которые я могу извлечь из этого, чтобы подать в Jekyll, чтобы воссоздать мой блог. Я знаю, что есть импортеры для Jekyll, но моя CMS не была одной из них (DNN/Ventrian). Я не видел способа импортировать лист Excel прямо в Jekyll.
Я хочу, чтобы все данные экспортировались в файлы - это не определенный диапазон или что-то еще, весь лист.
1 ответ
Кажется, это работает - хотя иногда это ошибки, я думаю, потому что значение, которое я использую в качестве имени файла, имеет проблему. У меня есть i = 1 до 50, пока я играю с ним, меняя его, контролируя, сколько строк он делает. Есть пара закомментированных утверждений Print, которые помогли увидеть, что происходит - они просто выводят на экран в небольшом всплывающем окне.
Это изменено с: https://forum.openoffice.org/en/forum/viewtopic.php?t=34074
sub saveas2
Dim oDocOptions(0) as New com.sun.star.beans.PropertyValue
'stores the document objects
Dim oDoc as Object
Dim oSheet as Object
Dim sSavePath as String
Dim sFileName as string
Dim sFullPath as String
Dim sSaveLink as String
Dim oSaveOptions(1) as New com.sun.star.beans.PropertyValue
Dim c as Integer
for c = 1 to 50
'stores the script doc's open settings
'setup the settings to open the crm script file with
oDocOptions(0).Name = "Hidden"
oDocOptions(0).Value = True
' print c
' print (thisComponent.getSheets.getByName("Query").getCellRangeByName("E" & c).getString)
'open a blank spreadsheet to build the script with
oDoc = starDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, oDocOptions())
'setup the first sheet of the new doc
oSheet = oDoc.sheets().getByIndex(0)
'print (thisComponent.getSheets.getByName("Query").getCellRangeByName("E" & c).getString)
oSheet.getCellRangeByName("A6").String = (thisComponent.getSheets.getByName("Query").getCellRangeByName("A" & c).getString)
oSheet.getCellRangeByName("A1").String = (thisComponent.getSheets.getByName("Query").getCellRangeByName("E" & c).getString)
oSheet.getCellRangeByName("A2").String = (thisComponent.getSheets.getByName("Query").getCellRangeByName("C" & c).getString)
oSheet.getCellRangeByName("A3").String = (thisComponent.getSheets.getByName("Query").getCellRangeByName("F" & c).getString)
oSheet.getCellRangeByName("A4").String = (thisComponent.getSheets.getByName("Query").getCellRangeByName("G" & c).getString)
'rebuild the options to save CRM doc with
'set the options to save the file
oSaveOptions(0).Name = "FilterName"
oSaveOptions(0).Value = "Text - txt - csv (StarCalc)" 'THIS ALLOWS IT TO BE SAVED AS A TXT FILE
oSaveOptions(1).Name = "FilterOptions"
oSaveOptions(1).Value = "59,0,11,1," 'THIS IS THE FORMATTING I USED TO ACHIEVE THE NO DELIMITER AND ASCII FORMAT
'store the save location
sFileName = (thisComponent.getSheets.getByName("Query").getCellRangeByName("A" & c).getString)
sSavePath = "j:\test\"
sFullpath = sSavePath & sFileName & ".html"
'Print sFullPath
'build the link of the file to get
sSaveLink = ConvertToURL(sFullPath)
'save the CRM script file
oDoc.storeAsURL(sSaveLink , oSaveOptions())
'close the CRM script file
oDoc.Close(True)
next c
end sub