如何使用C#代码创建包含使用查询直接连接到我的数据库的数据透视表的Excel工作表?

时间:2018-05-18 09:58:30

标签: c# sql-server excel excel-vba ms-office vba

我正在使用 Microsoft.Office.Interop.Excel dll,我想创建一个excel表,它使用查询从数据库获取数据,可以是数据透视表的形式,也可以是表单形式数据表。

我不想使用我的C#代码获取数据,然后插入Excel工作表。我希望生成的Excel工作表使用该查询直接连接到数据库。是否可能以及如何做?

请帮忙。

1 个答案:

答案 0 :(得分:0)

好的,这个怎么样?

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更新它。