sqlite 将.db表导出到带有标题/列和值的excel

w8f9ii69  于 2022-12-29  发布在  SQLite
关注(0)|答案(1)|浏览(209)

大家好:使用SQLiteDataReader,我可以获取表值,但无法使用SQLiteDataReader GetName获取列值
我的目标是我想在excel文件中与列名称的数据是相同的查询,然后由表的值。w什么是错误在这里?谢谢
我想我在for循环中犯了个错误。

Excel.Application xlApp;
    Excel.Workbook xlWorkBook;
    Excel.Worksheet xlWorkSheet;
    object misValue = System.Reflection.Missing.Value;

    xlApp = new Excel.Application();
    xlWorkBook = xlApp.Workbooks.Add(misValue);
    xlWorkSheet = xlWorkBook.Worksheets[1]; // (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    xlWorkSheet.Name = "Stats";

    string cs = @"C:\\db_test\\Database.db";
    string data = String.Empty;

    int i = 0;
    int j = 0;

    using (SQLiteConnection con = new SQLiteConnection("Data Source=C:\\db_test\\Database.db"))
    {
        con.Open();

        //string stm = "SELECT Oid from Stats";
        StringBuilder query = new StringBuilder();
        query.Append("SELECT");
        query.Append("[Oid], [CreatedOn], [OrderOid] ");
        query.Append(",[OrderLineOid], [OrderNumber], [Product] ");
        query.Append(",[PaperTypeName], [OutputProfile], [OutputProfileChannel] ");
        query.Append("FROM Stats");

        using (SQLiteCommand cmd = new SQLiteCommand(query.ToString(), con))
        {
            using (SQLiteDataReader rdr = cmd.ExecuteReader())
            {
            
                while (rdr.Read()) // Reading Rows
                {
                    var columns = new List<string>();
                    

                    for (j = 0; j <= rdr.FieldCount - 1; j++) // Looping throw colums
                    {
                        columns.Add(rdr.GetName(j));
                        data = rdr.GetValue(j).ToString();
                        xlWorkSheet.Cells[i + 1, j + 1] = data;

                    }
                    i++;
                }
            }
        }
        con.Close();
    }
    string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) +"\\"+ "Statictics_" + DateTime.Now.ToString("yyyyMMdd") + ".xls";
    
    xlWorkBook.SaveAs(path, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
    xlWorkBook.Close(true, misValue, misValue);
    xlApp.Quit();

    releaseObject(xlWorkSheet);
    releaseObject(xlWorkBook);
    releaseObject(xlApp);
yi0zb3m4

yi0zb3m41#

看起来你很可能从帖子的评论中得到了你需要的解决方案,但我会提供另一个。我维护一个库Sylvan.Data.Excel,它比Excel互操作更容易、更快。这个库是开源的,有一个许可证(MIT)。
写入.xlsx文件只需要几行代码。

SQLiteDataReader rdr = GetData(); // get your data reader from Sqlite

using var writer = ExcelDataWriter.Create("mydata.xlsx");
writer.Write(rdr, "Stats");

虽然我的库支持阅读最常见的Excel格式,但它只支持写入.xlsx文件。它是fastest Excel library for .NET。(你上面提供的代码)需要大约15分钟来写65k的记录,而Sylvan可以在不到半秒的时间内写。我的库也不需要在机器上安装Excel,它唯一依赖的是核心.NET运行时库。

相关问题