将ODS电子表格中的40万行导入LibreOfficeBase



我有一个ODS Speadsheet,它包含刚刚超过400k行,我想将这些行作为表导入LibreOffice Base。

作为测试,我可以通过将工作表拖动到Base中的Table区域来轻松导入10行。如果我试着用完整的电子表格来做这件事,我会出错。它似乎创建了表,但没有导入任何数据。如果我试图打开表格,它会给出错误:

The data content could not be loaded.
S1000 General error java.lang.NullPointerException in statement [SELECT * FROM "Table2"]

在明显的数据加载过程中,也会发出警告:

Warning
S1000 General error java.lang.NullPointerException in statement [INSERT INTO "Table2" ( "ID","COL1","COL2","COL3","COL4","COL5","COL6","COL7","COL8","COL9","COL10","COL11","COL12","COL13","COL14","COL15","COL15","COL16","COL17","COL18") VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)]
Continue anyway?

我也尝试过先用正确的表字段创建一个空表,然后追加数据,但也失败了。

有哪些选项可以将大量数据加载到Base?

有没有一种宏方法可以将数据从ODS写入Base,甚至可以将数据丢弃到50000行中,并以较小的片段导入/追加?

我可以在一个新的数据库中打开ODS表,但它是只读的,因为它使用ODS作为数据源。到目前为止,是否可以将数据从只读数据库复制到另一个新的独立数据库?也许又是宏观?

谢谢,

Base是数据库引擎的前端。你不必通过前门做任何事情,而且在你的情况下,前门听起来不够宽!因此,使用发动机所能提供的(并选择一个好的发动机(。

例如,如果您将Base与PostgreSQL一起使用(Ratslinger在ask.libreoffice.org上表示,这可能是Base的最佳引擎(,则使用此方法导入CSV文件:https://stackoverflow.com/a/2987451/5100564.注意:我还没有测试过这个,但它似乎适用于大文件。

就我个人而言,我已经将Base与MySQL基于文本的存储引擎结合使用。我只需将文本文件移到数据库目录中,MySQL就可以将其用作完全可编辑的表。看起来MySQL可以使用CSV以及其他几种文本格式。然后,将其转换为标准InnoDB表应该很简单。

无论你把它放在PostgreSQL还是MySQL InnoDB表中,400k行应该感觉很容易管理,如果表增长,数百万行应该不会成为问题。然而,如果您决定使用HSQLDB 1.8或Firebird作为引擎的嵌入式设置,那么您仍然可能会遇到问题,因为每次更改后,Base必须将所有内容压缩到一个文件中,而这通常会失败和崩溃。

宏应该也能工作,尽管编写基本宏对初学者来说是出了名的困难。不过,它不应该需要太多的代码行。如果你真的尝试了这个并陷入困境,像我这样的人可以提供更正,但我不会花时间为你编写宏。您的配置文件中似乎有一个python标记,LibreOffice宏可以用python UNO编写。

编辑

下面是我不久前用Python编写的一些基本代码。

def createDbTable():
oDoc = XSCRIPTCONTEXT.getDocument()
db = oDoc.DataSource
conn = db.getConnection("","")  #username & password pair
stmt = conn.createStatement()
strSQL = (
'CREATE TABLE Persons ('
'PersonID int, LastName varchar(255), FirstName varchar(255),'
'Address varchar(255), City varchar(255))')
stmt.execute(strSQL)
conn.close()

最新更新