Работа с ODF(Open office) как с архивом

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
SoIAm
незнакомец
Сообщения: 4
Зарегистрирован: 27.11.2007 14:02:37

Работа с ODF(Open office) как с архивом

Сообщение SoIAm »

Может у кого есть исходный код по разархивированию ODF, поиску в нем определенных тегов, замены этих тегов на определенные выражения, вводимые пользователем в программе, и заархивированием опять в ODF
Буду премного благодарен, просто срочно нужно, а времени разбираться с этим совершенно нету
Или может уже есть какой компонент под лазарус?
ViTality
постоялец
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение ViTality »

PeaZip/ZipFile/ZlibAr+XMLRead, XMLWrite, DOM
jbond1981
новенький
Сообщения: 36
Зарегистрирован: 19.10.2007 16:30:37

Сообщение jbond1981 »

http://wiki.services.openoffice.org/wiki/AODL для .Net

http://wiki.services.openoffice.org/wiki/Odf4j для Ява.

Для Паскаля нет. Ни в каком виде. Тебе все прийдется делать ручками/писать самому библиотеку. А это очень сложно.

Пример кода для VB.Net:

Код: Выделить всё

Imports AODL.Document

    Sub ExportODF(ByVal FileName As String)
        'Create new spreadsheet document
        Dim spreadsheetDocument As New SpreadsheetDocuments.SpreadsheetDocument

        If System.IO.File.Exists(FileName) Then
            spreadsheetDocument.Load(FileName)
        Else
            spreadsheetDocument.[New]()
        End If

        'Create a new table

        Dim Jahr As Integer = CInt(JahrToolStripTextBox.Text)
        Dim Monat As Integer = MonatToolStripComboBox.SelectedIndex + 1

        Dim dt As New DateTime(Jahr, Monat, 1)

        Dim table As New Content.Tables.Table(spreadsheetDocument, dt.ToString("MMMM yy"), "")

        With DatenDataGridView
            For rowIndex As Integer = 0 To .RowCount - 1
                For colIndex As Integer = 1 To .ColumnCount - 1
                    Dim cell As Content.Tables.Cell = table.CreateCell()

                    Dim curItem As DataGridViewCell = .Item(colIndex, rowIndex)
                    Dim curValue As Object = curItem.Value

                    If Not IsNothing(curValue) Then
                        If IsNumeric(curValue) Then
                            cell.OfficeValueType = SpreadsheetDocuments.Tables.Style.OfficeValueTypes.Float
                        Else
                            cell.OfficeValueType = SpreadsheetDocuments.Tables.Style.OfficeValueTypes.String
                        End If

                        'cell.CellStyle.CellProperties.Border = AODL.Document.Styles.Border.NormalSolid

                        cell.OfficeValue = curValue.ToString
                    End If
                    table.InsertCellAt(rowIndex + 1, colIndex + 1, cell)
                Next
            Next
        End With
        'Insert table into the spreadsheet document
        spreadsheetDocument.TableCollection.Add(table)
        spreadsheetDocument.SaveTo(FileName)
    End Sub
PublicJoke
новенький
Сообщения: 41
Зарегистрирован: 04.07.2006 12:21:07

Сообщение PublicJoke »

Если вы хотите использовать документ в качестве шаблона для генерации отчета, можно попробовать заглянуть сюда: http://freepascal.ru/forum/viewtopic.php?t=2585&highlight=openoffice.
jbond1981
новенький
Сообщения: 36
Зарегистрирован: 19.10.2007 16:30:37

Сообщение jbond1981 »

uno-pas-bridge - это не решение проблемы. На компе может и не быть OO.

А File-Save As ODF нужен.

Совет: если язык не важен - выбирай .Net. Если нужна кроссплатформенность - Ява (хотя заявлена совместимость AODL с Моно).

uno-pas-bridge - если ты завязан на Паскале, на всех компах будет стоять ОО и по каким-то причинам тебя не устраивает бесплатный Turbo Delphi 2006 Explorer.
SoIAm
незнакомец
Сообщения: 4
Зарегистрирован: 27.11.2007 14:02:37

Сообщение SoIAm »

uno-pas-bridge - если ты завязан на Паскале, на всех компах будет стоять ОО и по каким-то причинам тебя не устраивает бесплатный Turbo Delphi 2006 Explorer.
-------------------------------
Наверное так и поступлю, так как проект уже большой(это последнее, что осталось реализовать), переписывать на яве лень, пишется с учетом на кросс-платформенность. И ООо на машинах будет стоять

Благодарю всех за помощь
Ответить