Экспорт текста из Calc

Автор Андрей2014, 24 апреля 2015, 20:59

0 Пользователи и 1 гость просматривают эту тему.

Андрей2014

Доброго времени суток.
Была задача правильно импортировать текст - сделано. Обработано и сохранено. Теперь задача обратная, надо полученные данные экспортировать обратно в текстовый файл.
Итак, данные расположены на трёх листах, каждый из которых имеет 1024(столбца)Х150(строк). Надо получить текстовый файл, где все столбцы будут записаны друг за другом с разделением пустой строкой.
Т.е. имеея подобное в Calc

A B C D
4 2 2 9
5 5 1 4
5 7 3 7
7 0 8 2
8 6 3 1

надо в итоге получить текстовый файл подобный

A
4
5
5
7
8

B
2
5
7
0
6

C
2
1
3
8
3

D
9
4
7
2
1


Опять же, напрямую сделать такое, похоже, не удастся. Во что лучше экспортировать сначала?






JohnSUN

Должно сработать (если при описании задачи ничего не упустил)
Sub allSheetsToFile
Dim FilePath as String
Dim oSheets As Variant
Dim oSheet As Variant
Dim oCursor As Variant
Dim oDataArray As Variant
Dim FileChannel as Integer
Dim oFile as Object
Dim oOutputStream as Object
Dim oStreamString as Object
Dim oUcb as Object
Dim sCRLF as String

Dim i&, j&, k&
sCRLF = CHR(13) & CHR(10)
FilePath = ThisComponent.getURL()
Mid (FilePath, Len(FilePath)-2 , 3, "txt") ' Выходной файл: тот же путь, то же имя, только расширение .txt
oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
oOutputStream = createUnoService("com.sun.star.io.TextOutputStream")
If oUcb.Exists(FilePath) Then
oUcb.Kill(FilePath)
End If
oFile = oUcb.OpenFileReadWrite(FilePath)
oOutputStream.SetOutputStream(oFile.GetOutputStream)

oSheets = ThisComponent.getSheets()
For k = 0 To oSheets.getCount()-1
oSheet = oSheets.getByIndex(k)
oCursor = oSheet.createCursor()
oCursor.gotoEndOfUsedArea(True)
oDataArray = oCursor.getDataArray()
For j = LBound(oDataArray(0)) To UBound(oDataArray(0))
For i = LBound(oDataArray) To UBound(oDataArray)
oOutputStream.WriteString(CStr(oDataArray(i)(j)) & sCRLF)
Next i
oOutputStream.WriteString(sCRLF) ' В образце между колонками пустая строка была
Next j
Next k
oOutputStream.CloseOutput()
End Sub

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Андрей2014

ЦитироватьВ образце между колонками пустая строка была
Вы, наверное, имеете в виду не пустые строки, а пустые ряды между рядами 'ABCD'? - Да, моё упущение, я так расположил для наглядности (жаль, что движок форума не поддерживает тэгов рисования табличной сетки). На самом деле, никаких пустых строк или столбцов нет. Все столбцы от "A" до "AMJ" содержат данные (на всех листах), аналогично как и строки.

ps Система Gentoo Linux, запускать .vbs скрипты тот ещё геморрой :(