今天我有一个软件从网上下载xml数据并将其导出到适当表格中的MS Access DB。
在MS Access DB中,我创建了一个查询,使用这些表来创建列和行,就像我希望它在Excel中一样。
当我右键单击我的新查询表并选择导出到Excel时,我可以从该查询创建一个Excel文件。
基本上我想要做的是扩展我的软件,以便我可以用C#以编程方式将查询导出到Excel。
我该怎么做?
---------------------------
其他相关的事情我也想解决。
我在左侧数字上方得到绿色三角形,检查图像postimg.org/image/t6tvfw2cz如何从c#中删除。
是否可以使用c#代码格式化表格外观和设计?
是否有可能使用c#代码向标头添加过滤器? - Mana 15小时前
答案 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;
}
}