如何使用 C# 代码创建一个 Excel sheet,其中包含一个枢轴 table,它使用查询直接连接到我的数据库?
How to use C# code to create an Excel sheet that contains a pivot table which has direct connection to my database using a query?
我正在使用 Microsoft.Office.Interop.Excel dll,我想创建一个 excel sheet,它使用查询从数据库中获取数据,以数据透视表的形式或数据 Table.
的形式
我不想使用我的 C# 代码获取数据然后插入 Excel Sheet。我希望已生成的 Excel sheet 使用该查询直接连接到数据库。这可能吗?如何做?
请帮忙。
好的,这个怎么样?
using Microsoft.Office.Interop.Excel;
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var connection = @"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=MYDATASOURCE;Initial Catalog=AdventureWorks2017";
var command = "SELECT * FROM [Sales].[vSalesPersonSalesByFiscalYears]";
var xl = new Application
{
Visible = true
};
xl.Workbooks.Add();
var pivotCache = xl.ActiveWorkbook.PivotCaches().Add(XlPivotTableSourceType.xlExternal, null);
pivotCache.Connection = connection;
pivotCache.MaintainConnection = true;
pivotCache.CommandText = command;
pivotCache.CommandType = XlCmdType.xlCmdSql;
var sheet = (Worksheet)xl.ActiveSheet;
var pivotTables = (PivotTables)sheet.PivotTables();
var pivotTable = pivotTables.Add(pivotCache, xl.ActiveCell, "PivotTable1");
pivotTable.SmallGrid = false;
pivotTable.ShowTableStyleRowStripes = true;
pivotTable.TableStyle2 = "PivotStyleLight1";
PivotField pageField = (PivotField)pivotTable.PivotFields("SalesTerritory");
pageField.Orientation = XlPivotFieldOrientation.xlPageField;
PivotField rowField = (PivotField)pivotTable.PivotFields("FullName");
rowField.Orientation = XlPivotFieldOrientation.xlRowField;
pivotTable.AddDataField(pivotTable.PivotFields("2004"), "Sum of 2004", XlConsolidationFunction.xlSum);
}
}
}
出于演示目的,我使用了控制台应用程序,但对其进行了调整以适应您使用代码的任何方式。
我并没有假装原创了所有这些代码,我改编自:
Creating a PivotTable programmatically
正在为 AdventureWorks2017 和 Excel Interop 更新它。
我正在使用 Microsoft.Office.Interop.Excel dll,我想创建一个 excel sheet,它使用查询从数据库中获取数据,以数据透视表的形式或数据 Table.
的形式
我不想使用我的 C# 代码获取数据然后插入 Excel Sheet。我希望已生成的 Excel sheet 使用该查询直接连接到数据库。这可能吗?如何做?
请帮忙。
好的,这个怎么样?
using Microsoft.Office.Interop.Excel;
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var connection = @"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=MYDATASOURCE;Initial Catalog=AdventureWorks2017";
var command = "SELECT * FROM [Sales].[vSalesPersonSalesByFiscalYears]";
var xl = new Application
{
Visible = true
};
xl.Workbooks.Add();
var pivotCache = xl.ActiveWorkbook.PivotCaches().Add(XlPivotTableSourceType.xlExternal, null);
pivotCache.Connection = connection;
pivotCache.MaintainConnection = true;
pivotCache.CommandText = command;
pivotCache.CommandType = XlCmdType.xlCmdSql;
var sheet = (Worksheet)xl.ActiveSheet;
var pivotTables = (PivotTables)sheet.PivotTables();
var pivotTable = pivotTables.Add(pivotCache, xl.ActiveCell, "PivotTable1");
pivotTable.SmallGrid = false;
pivotTable.ShowTableStyleRowStripes = true;
pivotTable.TableStyle2 = "PivotStyleLight1";
PivotField pageField = (PivotField)pivotTable.PivotFields("SalesTerritory");
pageField.Orientation = XlPivotFieldOrientation.xlPageField;
PivotField rowField = (PivotField)pivotTable.PivotFields("FullName");
rowField.Orientation = XlPivotFieldOrientation.xlRowField;
pivotTable.AddDataField(pivotTable.PivotFields("2004"), "Sum of 2004", XlConsolidationFunction.xlSum);
}
}
}
出于演示目的,我使用了控制台应用程序,但对其进行了调整以适应您使用代码的任何方式。
我并没有假装原创了所有这些代码,我改编自:
Creating a PivotTable programmatically
正在为 AdventureWorks2017 和 Excel Interop 更新它。