blob: abf6d36dcc4f251fe7a4d6d77d0db398361d0e74 [file] [log] [blame]
/*******************************************************************************
* You may amend and distribute as you like, but don't remove this header!
*
* All rights reserved.
*
* EPPlus is an Open Source project provided under the
* GNU General Public License (GPL) as published by the
* Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* See http://epplus.codeplex.com/ for details
*
* The GNU General Public License can be viewed at http://www.opensource.org/licenses/gpl-license.php
* If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
*
* The code for this project may be used and redistributed by any means PROVIDING it is
* not sold for profit without the author's written consent, and providing that this notice
* and the author's name and all copyright notices remain intact.
*
* All code and executables are provided "as is" with no warranty either express or implied.
* The author accepts no liability for any damage or loss of business that this product may cause.
*
* Code change notes:
*
* Author Change Date
*******************************************************************************
* Jan Källman Added 23-MAR-2010
*******************************************************************************/
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using OfficeOpenXml;
using System.IO;
using OfficeOpenXml.Style;
using System.Drawing;
using System.Text;
namespace EPPlusWebSample
{
public partial class GetSample : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
switch (Request.QueryString["Sample"])
{
case "1":
Sample1();
break;
case "2":
Sample2();
break;
case "3":
Sample3();
break;
case "4":
Sample4();
break;
default:
Response.Write("<script>javascript:alert('Invalid querystring');</script>");
break;
}
}
/// <summary>
/// Sample 1
/// Demonstrates the SaveAs method
/// </summary>
private void Sample1()
{
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("Sample1");
ws.Cells["A1"].Value = "Sample 1";
ws.Cells["A1"].Style.Font.Bold = true;
var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
shape.SetPosition(50, 200);
shape.SetSize(200, 100);
shape.Text = "Sample 1 saves to the Response.OutputStream";
pck.SaveAs(Response.OutputStream);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=Sample1.xlsx");
}
/// <summary>
/// Sample 2
/// Demonstrates the GetAsByteArray method
/// </summary>
private void Sample2()
{
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("Sample2");
ws.Cells["A1"].Value = "Sample 2";
ws.Cells["A1"].Style.Font.Bold = true;
var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
shape.SetPosition(50, 200);
shape.SetSize(200, 100);
shape.Text = "Sample 2 outputs the sheet using the Response.BinaryWrite method";
Response.BinaryWrite(pck.GetAsByteArray());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=Sample2.xlsx");
}
/// <summary>
/// Sample 3
/// Uses a cached template
/// </summary>
private void Sample3()
{
if (Application["Sample3Template"] == null) //Check if the template is loaded
{
//Here we create the template.
//As an alternative the template could be loaded from disk or from a resource.
ExcelPackage pckTemplate = new ExcelPackage();
var wsTemplate = pckTemplate.Workbook.Worksheets.Add("Sample3");
wsTemplate.Cells["A1"].Value = "Sample 3";
wsTemplate.Cells["A1"].Style.Font.Bold = true;
var shape = wsTemplate.Drawings.AddShape("Shape1", eShapeStyle.Rect);
shape.SetPosition(50, 200);
shape.SetSize(200, 100);
shape.Text = "Sample 3 uses a template that is stored in the application cashe.";
pckTemplate.Save();
Application["Sample3Template"] = pckTemplate.Stream;
}
//Open the new package with the template stream.
//The template stream is copied to the new stream in the constructor
ExcelPackage pck = new ExcelPackage(new MemoryStream(), Application["Sample3Template"] as Stream);
var ws = pck.Workbook.Worksheets[1];
int row = new Random().Next(10) + 10; //Pick a random row to print the text
ws.Cells[row,1].Value = "We make a small change here, after the template has been loaded...";
ws.Cells[row, 1, row, 5].Style.Fill.PatternType = ExcelFillStyle.Solid;
ws.Cells[row, 1, row, 5].Style.Fill.BackgroundColor.SetColor(Color.LightGoldenrodYellow);
Response.BinaryWrite(pck.GetAsByteArray());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=Sample3.xlsx");
}
private void Sample4()
{
ExcelPackage pck = new ExcelPackage();
//Add a worksheet.
var ws=pck.Workbook.Worksheets.Add("VBA Sample");
ws.Drawings.AddShape("VBASampleRect", eShapeStyle.RoundRect);
//Create a vba project
pck.Workbook.CreateVBAProject();
//Now add some code that creates a bubble chart...
var sb = new StringBuilder();
sb.AppendLine("Private Sub Workbook_Open()");
sb.AppendLine(" [VBA Sample].Shapes(\"VBASampleRect\").TextEffect.Text = \"This text is set from VBA!\"");
sb.AppendLine("End Sub");
pck.Workbook.CodeModule.Code = sb.ToString();
Response.BinaryWrite(pck.GetAsByteArray());
Response.ContentType = "application/vnd.ms-excel.sheet.macroEnabled.12"; //.xlsm files uses a different contenttype than .xlsx
Response.AddHeader("content-disposition", "attachment; filename=Sample4.xlsm");
}
}
}