使用C#以编程方式将查询表从MS Access导出到Excel

时间:2013-12-10 14:22:19

标签: c# database excel ms-access

今天我有一个软件从网上下载xml数据并将其导出到适当表格中的MS Access DB。

在MS Access DB中,我创建了一个查询,使用这些表来创建列和行,就像我希望它在Excel中一样。

当我右键单击我的新查询表并选择导出到Excel时,我可以从该查询创建一个Excel文件。

基本上我想要做的是扩展我的软件,以便我可以用C#以编程方式将查询导出到Excel。

我该怎么做?

---------------------------

其他相关的事情我也想解决。

我在左侧数字上方得到绿色三角形,检查图像postimg.org/image/t6tvfw2cz如何从c#中删除。

是否可以使用c#代码格式化表格外观和设计?

是否有可能使用c#代码向标头添加过滤器? - Mana 15小时前

2 个答案:

答案 0 :(得分:4)

这样的事情应该这样做:

private static void ExportQuery(string databaseLocation, string queryNameToExport, string locationToExportTo)
{
    var application = new Application();
    application.OpenCurrentDatabase(databaseLocation);
    application.DoCmd.TransferSpreadsheet(AcDataTransferType.acExport, AcSpreadSheetType.acSpreadsheetTypeExcel12,
                                          queryNameToExport, locationToExportTo, true);
    application.CloseCurrentDatabase();
    application.Quit();
    Marshal.ReleaseComObject(application);
}

你会这样称呼:

ExportQuery(@"C:\blah\blah.accdb", "myQuery", @"C:\blah\blah.xlsx");

请务必使用以下语句添加:

using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Access;

答案 1 :(得分:0)

另一种解决方案是创建一个可以在Excel或其他应用程序中打开的CSV文件。请参阅此函数,该函数返回StringBuilder。然后可以将其保存为文件并通过代码打开: -

  string _filename = "a path" + "name.csv";
  File.WriteAllText(_filename, TheReturnedStringBuilder.ToString());
  System.Diagnostics.Process.Start(_filename);

CSV创建

    /// <summary>
    /// Nvest Development Solutions
    /// Export the SQL data into a comma separated file
    /// </summary>
    /// <param name="ConnectionString">Valid SQL Server connection string</param>
    /// <param name="Sql">A valid SQL statement</param>
    /// <param name="TimeOut">A timeout specified in seconds</param>
    /// <returns>A stringbuilder with comma separated data</returns>
    public static StringBuilder ExportToCSVFormat(string ConnectionString, string Sql, int TimeOut = 30)
    {
        StringBuilder csv = new StringBuilder();
        string s = "";
        DataTable dt = SQL.BuildTableFromSQL(ConnectionString, Sql, TimeOut);

        //Add the titles
        foreach (DataColumn col in dt.Columns)
        {
            s += "\"" + col.ColumnName + "\", ";
        }
        if (s.Length > 1)
        {
            s = s.Remove(s.Length - 2);
        }
        csv.AppendLine(s);

        //Add the data
        foreach (DataRow row in dt.Rows)
        {
            object[] param = new object[dt.Columns.Count];
            int j = 0;
            s = "";

            foreach (DataColumn col in dt.Columns)
            {
                s += "{" + j + "";

                if (col.DataType == typeof(int) || col.DataType == typeof(long) || col.DataType == typeof(double))
                {
                    s += ":0},";
                }
                else
                {
                    s += ":},";
                }

                param[j] = row[col.ToString()];

                j++;
            }

            csv.AppendLine(string.Format(s, param));
        }

        return csv;
    }
}