使用上面最接近的填充单元格的值填充Excel工作表(或SQLite)中的空单元格

时间:2012-03-12 19:07:49

标签: sql excel fill cells

我在向SQLite数据库发送查询时遇到了一个问题。

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

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

由于工作表/数据库的大小,我不能手动执行此操作,有没有办法以编程方式执行此操作?

我真的更喜欢sql-query方式,如果有的话!

祝福, TOR

3 个答案:

答案 0 :(得分:2)

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

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

  
    

您也可以在excel中完全执行此操作:

  
     

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

     

这将在每个空白单元格中放置一个公式,使其等于上面的单元格   它。然后你可以复制^粘贴值只是为了摆脱   公式。

答案 1 :(得分: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修复数据库。这更容易,您不需要理解上面的代码。

答案 2 :(得分:0)

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

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