亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現Excel動態生成PivotTable

2020-01-24 01:12:10
字體:
來源:轉載
供稿:網友

Excel 中的透視表對于數據分析來說,非常的方便,而且很多業務人員對于Excel的操作也是非常熟悉的,因此用Excel作為分析數據的界面,不失為一種很好的選擇。那么如何用C#從數據庫中抓取數據,并在Excel 動態生成PivotTable呢?下面結合實例來說明。

一般來說,數據庫的設計都遵循規范化的原則,從而減少數據的冗余,但是對于數據分析來說,數據冗余能夠提高數據加載的速度,因此為了演示透視表,這里現在數據庫中建立一個視圖,將需要分析的數據整合到一個視圖中。如下圖所示:

數據源準備好后,我們先來建立一個web應用程序,然后用NuGet加載Epplus程序包,如下圖所示:

 在index.aspx前臺頁面中,編寫如下腳本:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="ExcelPivot.Web.index" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  <title>Excel PivotTable</title>  <link rel="stylesheet" type="text/css" href="css/style.css" /> </head><body>  <form id="form1" runat="server">    <div id="container">      <div id="contents">        <div id="post">          <header>            <h1> Excel PivotTable </h1>          </header>          <div id="metro-array" style="display: inline-block;">            <div style="width: 230px; height: 230px; float: left; ">              <a class="metro-tile" style="cursor: pointer; width: 230px; height: 110px; display: block; background-color:#ff0000; color: #fff; margin-bottom: 10px;">                                 <input type="button" runat="server" id="Button1" name="btn1" value="回款情況分析" onserverclick="btn1_ServerClick"                           style="background-color:transparent; color:white; font-size:16px;float:left; border:0; width:230px; height:110px; cursor:pointer;"/>                            </a>              <a class="metro-tile" style="cursor: pointer; width: 230px; height: 110px; display: block; background-color:#ff6a00; color: #fff;">                 <input type="button" runat="server" id="Button2" name="btn1" value="sampe1" onserverclick="btn1_ServerClick"                           style="background-color:transparent; color:white; font-size:16px;float:left; border:0; width:230px; height:110px; cursor:pointer;"/>              </a>            </div>            <div style="width: 230px; height: 230px; float: left; margin-left: 10px">              <a class="metro-tile" style="cursor: pointer; width: 230px; height: 230px; display: block; background-color:#ffd800; color: #fff">                 <input type="button" runat="server" id="btn1" name="btn1" value="sampe1" onserverclick="btn1_ServerClick"                           style="background-color:transparent; color:white; font-size:16px;float:left; border:0; width:230px; height:230px; cursor:pointer;"/>              </a>            </div>            <div style="width: 230px; height: 230px; float: left; margin-left: 10px">              <a class="metro-tile" style="cursor: pointer; width: 230px; height: 110px; display: block; background-color:#0094ff; color: #fff; margin-bottom: 10px;">                 <input type="button" runat="server" id="Button3" name="btn1" value="sampe1" onserverclick="btn1_ServerClick"                           style="background-color:transparent; color:white; font-size:16px;float:left; border:0; width:230px; height:110px; cursor:pointer;"/>              </a>              <a class="metro-tile" style="cursor: pointer; width: 110px; height: 110px; margin-right: 10px; display: block; float: left; background-color: #4800ff; color: #fff;">                 <input type="button" runat="server" id="Button4" name="btn1" value="sampe1" onserverclick="btn1_ServerClick"                           style="background-color:transparent; color:white; font-size:16px;float:left; border:0; width:110px; height:110px; cursor:pointer;"/>              </a>              <a class="metro-tile" style="cursor: pointer; width: 110px; height: 110px; display: block; background-color: #b200ff; float: right; color: #fff;">                 <input type="button" runat="server" id="Button5" name="btn1" value="sampe1" onserverclick="btn1_ServerClick"                           style="background-color:transparent; color:white; font-size:16px;float:left; border:0; width:110px; height:110px; cursor:pointer;"/>              </a>            </div>          </div>        </div>      </div>    </div>  </form></body>  <script src="js/tileJs.js" type="text/javascript"></script></html>


其中 TileJs是一個開源的構建類似win8 Metro風格的javascript庫。

編寫后臺腳本:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using OfficeOpenXml;using OfficeOpenXml.Table;using OfficeOpenXml.ConditionalFormatting;using OfficeOpenXml.Style;using OfficeOpenXml.Utils;using OfficeOpenXml.Table.PivotTable;using System.IO;using System.Data.SqlClient;using System.Data;namespace ExcelPivot.Web{  public partial class index : System.Web.UI.Page  {    protected void Page_Load(object sender, EventArgs e)    {    }    private DataTable getDataSource()    {      //createDataTable();      //return ProductInfo;      SqlConnection conn = new SqlConnection();      conn.ConnectionString = "Data Source=.;Initial Catalog=olap;Persist Security Info=True;User ID=sa;Password=sa";      conn.Open();      SqlDataAdapter ada = new SqlDataAdapter("select * from v_pm_olap_test", conn);      DataSet ds = new DataSet();      ada.Fill(ds);      return ds.Tables[0];    }       protected void btn1_ServerClick(object sender, EventArgs e)    {      try      {        DataTable table = getDataSource();        string path = "_demo_" + System.Guid.NewGuid().ToString().Replace("-", "_") + ".xls";        //string path = "_demo.xls";        FileInfo fileInfo = new FileInfo(path);        var excel = new ExcelPackage(fileInfo);        var wsPivot = excel.Workbook.Worksheets.Add("Pivot");        var wsData = excel.Workbook.Worksheets.Add("Data");        wsData.Cells["A1"].LoadFromDataTable(table, true, OfficeOpenXml.Table.TableStyles.Medium6);        if (table.Rows.Count != 0)        {          foreach (DataColumn col in table.Columns)          {                       if (col.DataType == typeof(System.DateTime))            {              var colNumber = col.Ordinal + 1;              var range = wsData.Cells[2, colNumber, table.Rows.Count + 1, colNumber];              range.Style.Numberformat.Format = "yyyy-MM-dd";            }            else            {            }          }        }        var dataRange = wsData.Cells[wsData.Dimension.Address.ToString()];        dataRange.AutoFitColumns();        var pivotTable = wsPivot.PivotTables.Add(wsPivot.Cells["A1"], dataRange, "Pivot");        pivotTable.MultipleFieldFilters = true;        pivotTable.RowGrandTotals = true;        pivotTable.ColumGrandTotals = true;        pivotTable.Compact = true;        pivotTable.CompactData = true;        pivotTable.GridDropZones = false;        pivotTable.Outline = false;        pivotTable.OutlineData = false;        pivotTable.ShowError = true;        pivotTable.ErrorCaption = "[error]";        pivotTable.ShowHeaders = true;        pivotTable.UseAutoFormatting = true;        pivotTable.ApplyWidthHeightFormats = true;        pivotTable.ShowDrill = true;        pivotTable.FirstDataCol = 3;        //pivotTable.RowHeaderCaption = "行";        //row field        var field004 = pivotTable.Fields["銷售客戶經理"];        pivotTable.RowFields.Add(field004);        var field001 = pivotTable.Fields["項目簡稱"];        pivotTable.RowFields.Add(field001);        //field001.ShowAll = false;        //column field        var field002 = pivotTable.Fields["年"];        pivotTable.ColumnFields.Add(field002);        field002.Sort = OfficeOpenXml.Table.PivotTable.eSortType.Ascending;        var field005 = pivotTable.Fields["月"];        pivotTable.ColumnFields.Add(field005);        field005.Sort = OfficeOpenXml.Table.PivotTable.eSortType.Ascending;        //data field        var field003 = pivotTable.Fields["回款金額"];        field003.Sort = OfficeOpenXml.Table.PivotTable.eSortType.Descending;        pivotTable.DataFields.Add(field003);        pivotTable.RowGrandTotals = false;        pivotTable.ColumGrandTotals = false;               //save file        excel.Save();        //open excel file        string file = @"C:/Windows/explorer.exe";        System.Diagnostics.Process.Start(file, path);      }      catch (Exception ex)      {       Response.Write(ex.Message);      }    }  }}

編譯運行,如下圖所示:

 單擊 [回款情況分析],稍等片刻,會打開Excel,并自動生成透視表,如下圖所示:

以上就是本文的全部內容,希望對大家的學習有所幫助

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品中文在线| 亚洲精品电影网站| 欧美精品中文字幕一区| 欧美电影《睫毛膏》| 欧美巨乳在线观看| 欧美一级电影在线| 亚洲bt天天射| 亚洲第一偷拍网| 久久夜色精品国产| 久久久久久久97| 欧美老少配视频| 国产成人精品最新| 国产精品成人观看视频国产奇米| 国产亚洲xxx| 久久综合国产精品台湾中文娱乐网| 欧美激情性做爰免费视频| 92看片淫黄大片看国产片| 亚洲一区亚洲二区亚洲三区| 中文字幕日韩欧美精品在线观看| 欧美激情亚洲激情| 国产精品视频久久久| www国产精品视频| www国产亚洲精品久久网站| 九九热精品在线| 青青久久av北条麻妃黑人| 欧美日韩国产综合新一区| 亚洲人成毛片在线播放| 日韩av在线播放资源| 精品日本美女福利在线观看| 国产日韩在线免费| 国产精品va在线播放我和闺蜜| 欧美资源在线观看| 日韩av三级在线观看| 国产精品久久久久久久久男| 亚洲精品国产精品乱码不99按摩| 欧美精品国产精品日韩精品| 亚洲精品动漫久久久久| 欧美一区在线直播| 欧美成人午夜视频| 一区二区三区回区在观看免费视频| 国产精品久久色| 国产精品www| 福利一区福利二区微拍刺激| 国产精品偷伦免费视频观看的| 午夜剧场成人观在线视频免费观看| 国产精品户外野外| 国产精品成久久久久三级| 日韩国产高清视频在线| 亚洲美女激情视频| 久久综合免费视频| 8x海外华人永久免费日韩内陆视频| 亚洲免费伊人电影在线观看av| 成人h视频在线| 黄色成人在线播放| 亚洲成人久久久久| 国产啪精品视频网站| 在线观看视频亚洲| yellow中文字幕久久| 亚洲精品中文字幕av| 欧美午夜精品久久久久久久| 最近2019年手机中文字幕| 日韩在线视频线视频免费网站| 欧美中在线观看| 不卡av日日日| 久久久久久91香蕉国产| 亚洲一区亚洲二区亚洲三区| 国产一区二区三区毛片| 亚洲精品小视频| 欧美激情视频免费观看| 98视频在线噜噜噜国产| 中文字幕一区日韩电影| 久久精品国产欧美亚洲人人爽| 国产精品扒开腿做爽爽爽的视频| 成人精品一区二区三区电影免费| 一区二区三区在线播放欧美| 亚洲偷熟乱区亚洲香蕉av| 亚洲系列中文字幕| 国产精品视频一区二区三区四| 欧美日韩一区二区三区在线免费观看| 永久555www成人免费| 日韩经典中文字幕| 九九精品在线观看| 91在线观看免费观看| 欧美亚洲在线视频| 亚洲欧美日韩网| 日韩一区二区福利| 亚洲欧美在线播放| 国产中文字幕日韩| 亚洲人成在线观| 91爱视频在线| 欧美日韩激情视频8区| 最近2019中文字幕第三页视频| 日韩精品中文字幕在线播放| 亚洲国产欧美一区二区三区同亚洲| 亚洲欧美国产日韩天堂区| 国产成人免费91av在线| 亚洲一区二区三| 大量国产精品视频| 综合国产在线视频| 精品动漫一区二区| 在线观看免费高清视频97| 中文字幕亚洲专区| 91久久久久久久一区二区| 在线视频国产日韩| 韩日欧美一区二区| 欧美精品制服第一页| 日本久久久久久| 亚洲国产精品99久久| 97精品免费视频| 欧美激情乱人伦一区| 欧美性xxxxxx| 亚洲网站在线播放| 98精品国产自产在线观看| 亚洲男人天堂古典| 欧美激情成人在线视频| 亚洲精品电影在线| 欧美色另类天堂2015| 国产精品日韩在线一区| 欧美成人网在线| 伊人久久久久久久久久久| 91视频8mav| 青青a在线精品免费观看| 久久亚洲国产成人| 国内免费精品永久在线视频| 中文字幕9999| 国产99视频在线观看| 久久福利视频网| 日韩欧美一区二区在线| 97精品在线观看| 久久久久久亚洲| 日韩福利在线播放| 亚洲精品久久7777777| 亚洲视频在线视频| 久久99国产精品久久久久久久久| 55夜色66夜色国产精品视频| 亚洲伊人久久大香线蕉av| 亚洲国产精品推荐| 国产精品久久久久久久久粉嫩av| 亚洲精品一区二区久| 日本精品va在线观看| 黑人极品videos精品欧美裸| 国产精品自产拍高潮在线观看| 91国内免费在线视频| 插插插亚洲综合网| 日韩欧美有码在线| 免费成人高清视频| 欧美日韩福利视频| 欧美视频免费在线| 欧美国产日韩在线| 久久精品人人爽| 日韩欧美亚洲国产一区| 欧美大全免费观看电视剧大泉洋| 亚洲欧美日韩视频一区| 国产91在线高潮白浆在线观看| 久久久久久久久久久国产| 亚洲国产一区二区三区在线观看| 精品一区二区三区三区| 亚洲国产精品电影在线观看| 91久久精品国产91性色| 精品国产一区二区三区久久久狼| 亚洲精品日韩激情在线电影| 日本免费一区二区三区视频观看| 国产v综合v亚洲欧美久久| 亚洲韩国青草视频|