Apply a TableStyle to a QueryTable
本文关键字:QueryTable to TableStyle Apply | 更新日期: 2023-09-27 18:04:20
我可以使用查询表:
var sheet = (_excel.ActiveSheet as Excel.Worksheet);
var rng = sheet.Range("A1");
var qt = sheet.QueryTables.Add("ODBC;...", rng, "SELECT * FROM myTable");
qt.Refresh();
,这将正确导入数据(例如,日期实际上显示为日期等…)。但是当我尝试访问ListObject来应用TableStyle时,我得到了一个异常。
现在如果我添加一个列表对象,像
var sheet = (_excel.ActiveSheet as Excel.Worksheet);
var qt = sheet.ListObjects.Add(
Excel.Enums.XlListObjectSourceType.xlSrcQuery,
"ODBC;...",
null,
Excel.Enums.XlYesNoGuess.xlNo,
rng,
"TableStyleMedium9").QueryTable;
qt.CommandType = Excel.Enums.XlCmdType.xlCmdSql;
qt.CommandText = "SELECT * FROM myTable";
qt.Refresh();
查询中的日期显示为十进制数而不是日期…
我可以只是格式化列之后,但问题是,我实际上不知道正在运行的查询作为用户类型在运行时,所以我宁愿让Excel做到这一点。
所以本质上,我想要的是,使用第一个代码位并给它应用一个TableStyle
有人能帮忙吗?
这并没有着色,但它确实将数据组织到一个数据表中,当您使用断点进行调试并在填充完数据表后将鼠标移到数据表上时,您可以看到所有数据都被组织到列中。然后你可以对这个数据表做的就是将它绑定到win forms元素上的一个数据网格视图。
我将这个DataTable DataTable = new DataTable();
作为顶部的全局字段。
OleDbConnection conn = new OleDbConnection();
//This is making a connection to the excel file, don't worry about this I think you did it differently.
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + stringFileName + ";" + "Extended Properties='"Excel 12.0;HDR=Yes;'""; OleDbCommand cmd = new OleDbCommand
("SELECT * FROM [" + sheetFromTo + "]", conn);
DataSet dataSet1 = new DataSet();
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmd);
try
{
conn.Open();//opens connection
dataSet1.Clear();//empties, incase they refill it later
dataAdapter.SelectCommand = cmd;//calls the cmd up above
dataAdapter.Fill(dataSet1);//fills the dataset
dataGridView1.DataSource = dataSet1.Tables[0];//puts the dataset in the dataGridview
//important** creates a datatable from the dataset, most of our work with the server is with this datatable
DataTable dataTable = dataSet1.Tables[0];
DataTable = dataTable;
}
catch (Exception ex)
{
}
finally
{
conn.Close();
}