C\#Excel 동적 생 성 PivotTable 실현
11525 단어 C#ExcelPivotTable
일반적으로 데이터 베 이 스 는 규범 화 된 원칙 에 따라 데이터 의 번 거 로 움 을 줄 이지 만 데이터 분석 에 있어 데이터 의 번 거 로 움 은 데이터 로드 의 속 도 를 높 일 수 있 기 때문에 투시 표를 보 여주 기 위해 현재 데이터 베이스 에 보 기 를 만 들 고 분석 해 야 할 데 이 터 를 하나의 보기 에 통합 시 킵 니 다.다음 그림 에서 보 듯 이:
데이터 원본 이 준 비 된 후에 우 리 는 먼저 웹 프로그램 을 만 든 다음 에 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 스타일 의 자바 script 라 이브 러 리 를 구축 하 는 오픈 소스 입 니 다.배경 스 크 립 트 작성:
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 을 열 고 투시 표를 자동 으로 생 성 합 니 다.다음 그림 과 같 습 니 다.
이상 이 본문의 전부 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.