2012-03-12 293 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的解決方案更酷。

相關問題