csharp: Export DataTable to Excel using OpenXml 2.5 in asp.net

2023-10-31

 /// <summary>
    /// 
    /// </summary>
    public partial class WebForm1 : System.Web.UI.Page
    {


        DataTable getData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("name", typeof(string));
            dt.Rows.Add(1, "geovindu");
            dt.Rows.Add(2, "geov");
            dt.Rows.Add(3, "塗斯博");
            dt.Rows.Add(4, "趙雅芝");
            dt.Rows.Add(5, " なわち日本語");
            dt.Rows.Add(6, "처리한다");
            dt.Rows.Add(7, "涂聚文");
            dt.Rows.Add(8, "塗聚文");
            return dt;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid();
            }

        }
        /// <summary>
        /// 
        /// </summary>
        private void BindGrid()
        {
            this.GridView1.DataSource = getData();
            GridView1.DataBind();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
            
            string rootPath = HttpContext.Current.Server.MapPath("~").ToString();
            string localCopy = "塗聚文" + DateTime.Now.ToString("yyyyMMddHHmmssfff")+ ".xlsx"; //
            string file = new ExcelHelper().ExportToExcel(getData(), "geovindu",localCopy);
            File.Copy(file, rootPath + localCopy);
            Response.Redirect(HttpUtility.UrlEncode(localCopy,System.Text.Encoding.UTF8));
        }
    }


//https://www.microsoft.com/en-us/download/details.aspx?id=5124  Open XML SDK 2.0 for Microsoft Office
   //https://www.microsoft.com/en-us/download/details.aspx?id=30425 Open XML SDK 2.5 for Microsoft Office
   //https://github.com/OfficeDev/Open-Xml-Sdk
   //http://www.codeproject.com/Tips/366446/Export-GridView-Data-to-Excel-using-OpenXml
 
   //引用: WindowsBase.DLL  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\WindowsBase.dll
 
   /// <summary>
   ///
   /// </summary>
   internal class ExcelHelper
   {
 
       /// <summary>
       ///
       /// </summary>
       internal class ColumnCaption
       {
           private static string[] Alphabets = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
           private static ColumnCaption instance = null;
           private List<string> cellHeaders = null;
           public static ColumnCaption Instance
           {
               get
               {
                   if (instance == null)
                       return new ColumnCaption();
                   else return ColumnCaption.Instance;
               }
           }
           /// <summary>
           ///
           /// </summary>
           public ColumnCaption()
           {
               this.InitCollection();
           }
           /// <summary>
           ///
           /// </summary>
           private void InitCollection()
           {
               cellHeaders = new List<string>();
 
               foreach (string sItem in Alphabets)
                   cellHeaders.Add(sItem);
 
               foreach (string item in Alphabets)
                   foreach (string sItem in Alphabets)
                       cellHeaders.Add(item + sItem);
           }
 
           /// <summary>
           /// Returns the column caption for the given row & column index.
           /// </summary>
           /// <param name="rowIndex">Index of the row.</param>
           /// <param name="columnIndex">Index of the column.</param>
           /// <returns></returns>
           internal string Get(int rowIndex, int columnIndex)
           {
               return this.cellHeaders.ElementAt(columnIndex) + (rowIndex + 1).ToString();
           }
       }
 
       /// <summary>
       /// 导出
       /// </summary>
       /// <param name="DataTable">DataTable</param>
       /// <param name="sheetname">工作表名</param>
       /// <param name="filename">文件名</param>
       /// <returns></returns>
       internal string ExportToExcel(DataTable table, string sheetname,string filename)
       {
           string excelfile = Path.GetTempPath() + filename;
           using (SpreadsheetDocument excelDoc = SpreadsheetDocument.Create(excelfile, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook))
           {
               CreateExcelParts(excelDoc, table,sheetname);
           }
           return excelfile;
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="spreadsheetDoc"></param>
       /// <param name="data"></param>
       /// <param name="sheetname"></param>
       private void CreateExcelParts(SpreadsheetDocument spreadsheetDoc, DataTable data,string sheetname)
       {
           WorkbookPart workbookPart = spreadsheetDoc.AddWorkbookPart();
           CreateWorkbookPart(workbookPart, sheetname);
 
           int workBookPartCount = 1;
 
           WorkbookStylesPart workbookStylesPart = workbookPart.AddNewPart<WorkbookStylesPart>("rId" + (workBookPartCount++).ToString());
           CreateWorkbookStylesPart(workbookStylesPart);
 
           WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>("rId" + (101).ToString());
           CreateWorksheetPart(workbookPart.WorksheetParts.ElementAt(0), data);
 
           SharedStringTablePart sharedStringTablePart = workbookPart.AddNewPart<SharedStringTablePart>("rId" + (workBookPartCount++).ToString());
           CreateSharedStringTablePart(sharedStringTablePart, data);
 
           workbookPart.Workbook.Save();
       }
 
       /// <summary>
       /// Creates the shared string table part.
       /// </summary>
       /// <param name="sharedStringTablePart">The shared string table part.</param>
       /// <param name="sheetData">The sheet data.</param>
       private void CreateSharedStringTablePart(SharedStringTablePart sharedStringTablePart, DataTable sheetData)
       {
           UInt32Value stringCount = Convert.ToUInt32(sheetData.Rows.Count) + Convert.ToUInt32(sheetData.Columns.Count);
 
           SharedStringTable sharedStringTable = new SharedStringTable()
           {
               Count = stringCount,
               UniqueCount = stringCount
           };
 
           for (int columnIndex = 0; columnIndex < sheetData.Columns.Count; columnIndex++)
           {
               SharedStringItem sharedStringItem = new SharedStringItem();
               Text text = new Text();
               text.Text = sheetData.Columns[columnIndex].ColumnName;
               sharedStringItem.Append(text);
               sharedStringTable.Append(sharedStringItem);
           }
 
           for (int rowIndex = 0; rowIndex < sheetData.Rows.Count; rowIndex++)
           {
               SharedStringItem sharedStringItem = new SharedStringItem();
               Text text = new Text();
               text.Text = sheetData.Rows[rowIndex][0].ToString();
               sharedStringItem.Append(text);
               sharedStringTable.Append(sharedStringItem);
           }
 
           sharedStringTablePart.SharedStringTable = sharedStringTable;
       }
 
       /// <summary>
       /// Creates the worksheet part.
       /// </summary>
       /// <param name="worksheetPart">The worksheet part.</param>
       /// <param name="data">The data.</param>
       private void CreateWorksheetPart(WorksheetPart worksheetPart, DataTable data)
       {
           Worksheet worksheet = new Worksheet() { MCAttributes = new MarkupCompatibilityAttributes() { Ignorable = "x14ac" } };
           worksheet.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
           worksheet.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
           worksheet.AddNamespaceDeclaration("x14ac", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac");
 
 
           SheetViews sheetViews = new SheetViews();
           SheetView sheetView = new SheetView() { WorkbookViewId = (UInt32Value)0U };
           Selection selection = new Selection() { ActiveCell = "A1" };
           sheetView.Append(selection);
           sheetViews.Append(sheetView);
 
           PageMargins pageMargins = new PageMargins()
           {
               Left = 0.7D,
               Right = 0.7D,
               Top = 0.75D,
               Bottom = 0.75D,
               Header = 0.3D,
               Footer = 0.3D
           };
 
           SheetFormatProperties sheetFormatPr = new SheetFormatProperties()
           {
               DefaultRowHeight = 15D,
               DyDescent = 0.25D
           };
 
           SheetData sheetData = new SheetData();
 
           UInt32Value rowIndex = 1U;
 
           Row row1 = new Row()
           {
               RowIndex = rowIndex++,
               Spans = new ListValue<StringValue>() { InnerText = "1:3" },
               DyDescent = 0.25D
           };
 
           for (int columnIndex = 0; columnIndex < data.Columns.Count; columnIndex++)
           {
               Cell cell = new Cell() { CellReference = ExcelHelper.ColumnCaption.Instance.Get((Convert.ToInt32((UInt32)rowIndex) - 2), columnIndex), DataType = CellValues.String };
               CellValue cellValue = new CellValue();
               cellValue.Text = data.Columns[columnIndex].ColumnName.ToString().FormatCode();
               cell.Append(cellValue);
 
               row1.Append(cell);
           }
           sheetData.Append(row1);
 
           for (int rIndex = 0; rIndex < data.Rows.Count; rIndex++)
           {
               Row row = new Row()
               {
                   RowIndex = rowIndex++,
                   Spans = new ListValue<StringValue>() { InnerText = "1:3" },
                   DyDescent = 0.25D
               };
 
               for (int cIndex = 0; cIndex < data.Columns.Count; cIndex++)
               {
                   if (cIndex == 0)
                   {
                       Cell cell = new Cell() { CellReference = ExcelHelper.ColumnCaption.Instance.Get((Convert.ToInt32((UInt32)rowIndex) - 2), cIndex), DataType = CellValues.String };
                       CellValue cellValue = new CellValue();
                       cellValue.Text = data.Rows[rIndex][cIndex].ToString();
                       cell.Append(cellValue);
 
                       row.Append(cell);
                   }
                   else
                   {
                       Cell cell = new Cell() { CellReference = ExcelHelper.ColumnCaption.Instance.Get((Convert.ToInt32((UInt32)rowIndex) - 2), cIndex), DataType = CellValues.String };
                       CellValue cellValue = new CellValue();
                       cellValue.Text = data.Rows[rIndex][cIndex].ToString();
                       cell.Append(cellValue);
 
                       row.Append(cell);
                   }
               }
               sheetData.Append(row);
           }
 
           worksheet.Append(sheetViews);
           worksheet.Append(sheetFormatPr);
           worksheet.Append(sheetData);
           worksheet.Append(pageMargins);
           worksheetPart.Worksheet = worksheet;
       }
 
       /// <summary>
       /// Creates the workbook styles part.
       /// </summary>
       /// <param name="workbookStylesPart">The workbook styles part.</param>
       private void CreateWorkbookStylesPart(WorkbookStylesPart workbookStylesPart)
       {
           Stylesheet stylesheet = new Stylesheet() { MCAttributes = new MarkupCompatibilityAttributes() { Ignorable = "x14ac" } };
           stylesheet.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
           stylesheet.AddNamespaceDeclaration("x14ac", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac");
 
           StylesheetExtensionList stylesheetExtensionList = new StylesheetExtensionList();
           StylesheetExtension stylesheetExtension = new StylesheetExtension() { Uri = "{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" };
           stylesheetExtension.AddNamespaceDeclaration("x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
           DocumentFormat.OpenXml.Office2010.Excel.SlicerStyles slicerStyles = new DocumentFormat.OpenXml.Office2010.Excel.SlicerStyles() { DefaultSlicerStyle = "SlicerStyleLight1" };
           stylesheetExtension.Append(slicerStyles);
           stylesheetExtensionList.Append(stylesheetExtension);
 
           stylesheet.Append(stylesheetExtensionList);
 
           workbookStylesPart.Stylesheet = stylesheet;
       }
 
       /// <summary>
       /// Creates the workbook part.
       /// </summary>
       /// <param name="workbookPart">The workbook part.</param>
       private void CreateWorkbookPart(WorkbookPart workbookPart,string sheetName)
       {
           Workbook workbook = new Workbook();
           Sheets sheets = new Sheets();
 
           Sheet sheet = new Sheet()
           {
               Name = sheetName,  //工作表名
               SheetId = Convert.ToUInt32(101),
               Id = "rId" + (101).ToString()
           };
           sheets.Append(sheet);
 
           CalculationProperties calculationProperties = new CalculationProperties()
           {
               CalculationId = (UInt32Value)123456U  // some default Int32Value
           };
 
           workbook.Append(sheets);
           workbook.Append(calculationProperties);
 
           workbookPart.Workbook = workbook;
       }
 
   }
   /// <summary>
   ///
   /// </summary>
   public static class Extensions
   {
       public static string FormatCode(this string sourceString)
       {
           if (sourceString.Contains("<"))
               sourceString = sourceString.Replace("<", "<");
 
           if (sourceString.Contains(">"))
               sourceString = sourceString.Replace(">", ">");
 
           return sourceString;
       }
   }




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

csharp: Export DataTable to Excel using OpenXml 2.5 in asp.net 的相关文章

  • FullCalendar Asp.Net WebForms

    我正在尝试实施全日历 https i stack imgur com wmhGx png在我的 ASP NET 上WebForms项目 我见过一些实现此目的的示例 但没有任何运气 因为它们是针对我不习惯的 MVC 的 My Events数据
  • 列出运行时从开放泛型类型创建的封闭类型

    当我列出当前 AppDomain 中的所有类型时 我会看到带有通用占位符的通用类型 但是 如果我使用类型实例化泛型类型 然后列出 appDomain 中的所有类型 则我看不到新创建的封闭类型 在下面的示例中 输出仅为 Foo 1 T 我正在
  • 为什么要加密 ASP.NET 中的查询字符串?

    我正在开发一个用 C ASP NET 编写的 Web 应用程序 该应用程序的原始设计者选择使用加密的查询字符串和Viewstate控制应用程序的 安全 和 状态 在此之前 我来自 GET POST 世界 我没有很好的基础来理解为什么人们会经
  • 没有端点在 net.pipe://localhost/ 上监听

    我有两个 WCF 服务托管在 Windows Server 2003 计算机上的单个 Windows 服务中 如果 Windows 服务需要访问任一 WCF 服务 例如发生定时事件时 它将使用公开的五个命名管道端点之一 不同的服务协定 该服
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 终结器线程的范围是什么 - 每个应用程序域或每个进程?

    根据我的所有阅读 应该有一个 GC 线程来调用所有终结器 现在的问题是这个 一个 线程的范围是什么 每个进程或每个应用程序域 因为域的整体目的是在一个进程空间中分离并创建 独立 的不同应用程序 I read here http dn cod
  • 如何在 C# 中向类、方法、属性等添加文档工具提示?

    不确定我的说法是否正确 但我想开始向我的类 方法 属性等添加一些文档 我know这可能是非常明显的 但我从未真正学会过 我不知道从哪里开始 只是为了澄清 每当您滚动某个类 或方法 属性等 时 它都会在 Visual Studio 中显示一个
  • 获得新的 access_token 后,如何更新我的 cookie?

    使用刷新令牌获取新的访问令牌后 我想使用该访问令牌更新我的客户端 cookie 我的客户端能够使用 ajax 登录并调用我的 REST API 但是当第一次授权过期时 API 调用自然不再起作用 我有一个 NET Web 应用程序 它使用自
  • 两个 RichTextBox 具有相同的滚动条

    是否有任何可用的第三方工具有两个富文本框 但两者只有一个共享滚动条 我需要用两种不同的语言实现一些文本 但两个文本框应该同时滚动 public enum ScrollBarType uint SbHorz 0 SbVert 1 SbCtl
  • 删除匹配前的一个单词和一个单词

    匹配之前的一个单词可以是一组任何符号 例如 D E F 我有一个正则表达式 s w s XXX 输入示例 This is KKK M D D xXx PPP输出示例 This is KKK PPP 所以我需要删除 XXX 之前的 1 个单词
  • 签署.net核心程序集的正确方法

    我正在尝试签署 net core 库 但我不确定我是否正确执行了所有操作 1 使用VS命令提示符IS调用sn k mykey snk 2 复制mykey snk到我的项目文件夹 3 in project json添加了密钥文件 framew
  • default(CancellationToken) 如何有对应的 CancellationTokenSource

    当我创建默认值时CancellationToken我可以在调试器中看到CancellationToken has a CancellationTokenSource与其关联的存储在私有中m source field 我想知道对于结构来说怎么
  • WCF WebHttp 混合身份验证(基本和匿名)

    所有这些都与 WebHttp 绑定有关 托管在自定义服务主机中 IIS 目前不是一个选项 我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy 当我将端点的绑定配置为使用
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 为什么有些控件同时具有BackgroundImage和Image属性?

    为什么有些控件喜欢Button or PictureBox两者都有BackgroundImage and Image财产 为什么在按钮的情况下需要它们两个 或者为什么在图片框中背景图像应该可用 BackgroundImage继承自Contr
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • 将 dll 注册到 GAC 或从 ASP.NET 中的 bin 文件夹引用它们是否更好

    如果答案是 视情况而定 您能否提供一个简短的解释 GAC 旨在包含以下组件跨多个应用程序共享 如果是这种情况 您应该对程序集进行强命名并向 GAC 注册 如果不是 请将程序集保留为私有程序集并将其作为项目 dll 引用进行引用 PS 没有真
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐