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

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

在MS Access数据库中,我创build了一个查询使用表来创build列和行,因为我希望它看起来像在Excel中。

当我右键单击我的新查询表,并select导出到Excel,我能够从该查询创build一个Excel文件。

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

我怎样才能做到这一点?

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

其他方面的事情我也想解决。

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

是否有可能格式表的外观和devise与C#代码?

用c#代码添加filter到头是否是可行的? – 法力15小时前

像这样的东西应该这样做:

 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; 

另一个解决scheme是创build一个可以在Excel或其他应用程序中打开的CSV文件。 看到这个函数返回一个StringBuilder。 这可以保存为一个文件,并通过代码打开:

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

CSV创build

  /// <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; } }