2012-03-12 152 views
0

我在向SQLite数据库发送查询时遇到了问题。在excel表格(或SQLite)中填充空单元格的最近填充单元格的值高于

问题是数据库(源自Excel工作表)有空单元格,其中应该有值,从上面的单元格给出的值在同一列中。

换句话说,如果值没有改变,excel工作表的制造者已将同一列中的单元格留空。我实际上需要这些单元格中的值!

由于sheet/db的大小,我无法手动执行此操作,有没有办法以编程方式执行此操作?

我真的更喜欢sql查询的方式,如果有的话!

最良好的祝愿, 托尔

+0

这是一个android问题吗?如果不适用,请考虑删除标签。 – Kekoa 2012-03-12 19:11:34

+0

是的,没有。数据库适用于android应用程序,虽然它不是一个android特定的问题。标签已移除。 – user1264884 2012-03-12 19:17:45

+0

如果忘记了数据入口,您如何知道上面的内容是正确的? – datatoo 2012-03-12 19:27:18

回答

0

您查询整个分贝,保持原来的排序顺序,然后每一行迭代。如果某些内容为空,则使用上面的值更新它。

编辑:你可能有类似这样的东西在这里做到这一点:

SQLiteDatabase db = SQLiteDatabase.openDatabase("myDb.db", null, SQLiteDatabase.OPEN_READWRITE); 
Cursor c = db.query("table", null, null, null, null, null, "the column that defines the sort order"); 
if (c != null) { 
    int columnCount = c.getColumnCount(); 
    String[] lastValues = new String[columnCount]; 
    while (c.moveToNext()) { 
     ContentValues cv = new ContentValues(); 
     for (int i = 0; i < columnCount; i++) { 
      String value = c.getString(i); 
      if (TextUtils.isEmpty(value)) { 
       // if that happens on first column you are screwed anyways. 
       cv.put(c.getColumnName(i), lastValues[i]); 
      } else { 
       lastValues[i] = value; 
      } 
      // we need to save some id here 
     } 
     if (cv.size() > 0) { 
      // use the id here 
      db.update("table", cv, "column=?", new String[] { "id" }); 
     } 
    } 
    c.close(); 
} 

但我会建议你使用Excel来修复数据库。这很容易,你不需要了解上面的代码。

+0

我该如何执行该操作? – user1264884 2012-03-12 19:13:42

+0

查看更新的答案 – zapl 2012-03-12 20:08:19

2

你可以在Excel中做到这一点。我回答了类似的问题在这里:

Blank Values in Excel File From CSV (not just rows)

您也可以在Excel中做到这一点完全:

选择列(或任何范围您正在使用),然后去到 编辑>转到(Ctrl + G)并单击特殊。检查空白&单击确定。此 将只选择列表中的空单元格。现在键入=键, 然后向上箭头和按Ctrl-输入。

这会在每个空白单元格中放入一个公式,使它等于 以上的单元格。然后,您可以复制^粘贴值,以摆脱 公式。

0

与@maneesha提出的方法类似的方法是过滤空白单元格,然后写入“等于上部单元格”公式,然后清除过滤器。

但我认为@maneeshas的解决方案更酷。

相关问题