Как использовать код C # для создания листа Excel, который содержит сводную таблицу, которая имеет прямое соединение с моей базой данных с помощью запроса? - PullRequest
0 голосов
/ 18 мая 2018

Я использую Microsoft.Office.Interop.Excel dll, и я хочу создать таблицу Excel, которая получает данные из базы данных с помощью запроса, либо в форме сводных таблиц, либо в формеТаблица данных. Я не хочу получать данные, используя мой код C #, а затем вставлять их в лист Excel.Я хочу, чтобы сгенерированный лист Excel имел прямое соединение с базой данных с помощью этого запроса.Возможно ли это и как это сделать? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 18 мая 2018

Хорошо, а как насчет этого?

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

В демонстрационных целях я использовал консольное приложение, но адаптировал его так, чтобы он подходил так, как вы работаете с кодом.

Я не претендую на то, что создал весь этот код, я адаптировал его из:

Создание сводной таблицы программным способом

, обновление ее для AdventureWorks2017 иExcel Interop.

...