ExcelHelper office 导出
要是服务器上没有装着excel 可以用c#导出excel表吗
租用的空间 服务器上没有装着office excel,可以用c#导出excel表吗?
怎样做?给点代码……
可以使用二进制读写Excel的开源组件org.in2bits.MyXls.dll导出真正的Excel文件。 以下是我简单封装的一个ExcelHelper using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Collections.Generic; using org.in2bits.MyXls; using org.in2bits.MyXls.ByteUtil; /// <summary> ///ExcelHelper 的摘要说明 /// </summary> public class ExcelHelper { protected ExcelHelper() { } public class TableStruct { private string _TableName; private string _TableCaption; private List<ColumnStruct> _ColumnInfoAry; public string TableName { get { if (string.IsNullOrEmpty(_TableName)) { return string.Empty; } return _TableName; } set { _TableName = value; } } public string TableCaption { get { if (string.IsNullOrEmpty(_TableCaption)) { return TableName; } return _TableCaption; } set { _TableCaption = value; } } public List<ColumnStruct> ColumnInfoAry { get { if (_ColumnInfoAry == null) { _ColumnInfoAry = new List<ColumnStruct>(); } return _ColumnInfoAry; } } public void AddColumnInfo(ColumnStruct ColumnInfo) { if (ColumnInfo == null) { return; } if (_ColumnInfoAry == null) { _ColumnInfoAry = new List<ColumnStruct>(); } foreach (ColumnStruct col in _ColumnInfoAry) { if (col.ColumnName.Equals(ColumnInfo.ColumnName, StringComparison.OrdinalIgnoreCase)) { return; } } _ColumnInfoAry.Add(ColumnInfo); } public ColumnStruct GetColumnInfo(string ColumnName) { if (string.IsNullOrEmpty(ColumnName) ) { return null; } if (_ColumnInfoAry == null) { return null; } ColumnStruct ColumnInfo = null; foreach (ColumnStruct col in _ColumnInfoAry) { if (col.ColumnName.Equals(ColumnName, StringComparison.OrdinalIgnoreCase)) { ColumnInfo = col; } } return ColumnInfo; }
} public class ColumnStruct { private string _ColumnName; private string _ColumnCaption; private string _ColumnTextFormat;
public string ColumnName { get { if (string.IsNullOrEmpty(_ColumnName)) { return string.Empty; } return _ColumnName; } set { _ColumnName = value; } } public string ColumnCaption { get { if (string.IsNullOrEmpty(_ColumnCaption)) { return ColumnName; } return _ColumnCaption; } set { _ColumnCaption = value; } }
public string ColumnTextFormat { get { if (string.IsNullOrEmpty(_ColumnTextFormat)) { return string.Empty; } return _ColumnTextFormat; } set { _ColumnTextFormat = value; } } }
public static void ExportToExcel(DataSet ds,List<TableStruct> TableInfoAry) { if (ds == null) { ds = new DataSet(); } if ( TableInfoAry == null ) { TableInfoAry = new List<TableStruct>(); }
XlsDocument xls = new XlsDocument(); xls.FileName = DateTime.Now.ToString("yyyyMMddHHmmssffff",System.Globalization.DateTimeFormatInfo.InvariantInfo); xls.SummaryInformation.Author = "wangmh"; //填加xls文件作者信息 xls.SummaryInformation.NameOfCreatingApplication = "Microsoft Excel"; //填加xls文件创建程序信息 xls.SummaryInformation.LastSavedBy = "wangmh"; //填加xls文件最后保存者信息 xls.SummaryInformation.Comments = "Gwm"; //填加xls文件作者信息 xls.SummaryInformation.Title = "Gwm"; //填加xls文件标题信息 xls.SummaryInformation.Subject = "Gwm";//填加文件主题信息 xls.DocumentSummaryInformation.Company = "Gwm";//填加文件公司信息 foreach (TableStruct TableInfo in TableInfoAry) { DataTable dt = ds.Tables[TableInfo.TableName]; if (dt == null) { continue; } Worksheet sheet = xls.Workbook.Worksheets.Add(TableInfo.TableCaption); //设置标头栏 ushort ColumnIndex = 1; foreach (ColumnStruct ColStruct in TableInfo.ColumnInfoAry) { ushort RowIndex = 1; Row row = sheet.Rows.AddRow(RowIndex); if (!dt.Columns.Contains(ColStruct.ColumnName)) { continue; }
Cell cell = null; if (row.CellExists(ColumnIndex)) { cell = row.GetCell(ColumnIndex); } else { cell = sheet.Cells.Add(RowIndex, ColumnIndex, null); //row.AddCell(cell); } cell.Value = ColStruct.ColumnCaption; cell.Font.Weight = FontWeight.Bold; cell.HorizontalAlignment = HorizontalAlignments.Centered; cell.BottomLineStyle = 2; cell.BottomLineColor = Colors.Grey; cell.Font.Height = 10 * 20; cell.VerticalAlignment = VerticalAlignments.Centered;
ushort ColumnMaxLength = GetColumnValueMaxLength(dt, ColStruct); //设定列宽为自适应宽度 ColumnInfo colInfo = new ColumnInfo(xls, sheet);//生成列格式对象 //设定colInfo格式的起作用的列为第1列到第5列(列格式为0-base) colInfo.ColumnIndexStart = (ushort)(ColumnIndex-1); colInfo.ColumnIndexEnd = colInfo.ColumnIndexStart; colInfo.Width = (ushort)(ColumnMaxLength * 256);//列的宽度计量单位为 1/256 字符宽 sheet.AddColumnInfo(colInfo);//把格式附加到sheet页上(注:AddColumnInfo方法有点小问题,不能把colInfo对象多次附给sheet页)
ColumnIndex++; }
for (ushort i = 0; i < dt.Rows.Count; i++) { ushort RowIndex = (ushort)(i + 2); Row row = sheet.Rows.AddRow(RowIndex); int j = 0; foreach (ColumnStruct ColStruct in TableInfo.ColumnInfoAry) { if ( !dt.Columns.Contains(ColStruct.ColumnName) ) { continue; }
ColumnIndex = (ushort)(j + 1); Cell cell = null; if (row.CellExists(ColumnIndex)) { cell = row.GetCell(ColumnIndex); } else { cell = sheet.Cells.Add(RowIndex, ColumnIndex, null); //row.AddCell(cell); }
object objValue = dt.Rows[i][ColStruct.ColumnName]; cell.Value = GetColumnValueFormat(dt,ColStruct,objValue); cell.Font.Weight = FontWeight.Normal; cell.HorizontalAlignment = HorizontalAlignments.Centered; j++; } } } xls.Send(); }
private static string GetColumnValueFormat(DataTable dt, ColumnStruct ColStruct, Object ObjValue) { string ColumnValue = string.Empty; if ( ObjValue != null && ObjValue!= DBNull.Value ) { string ColumnDataType = dt.Columns[ColStruct.ColumnName].DataType.ToString(); switch (ColumnDataType) { case "System.Boolean": case "System.Byte": { ColumnValue = ObjValue.ToString(); break; } case "System.Decimal": { if (string.IsNullOrEmpty(ColStruct.ColumnTextFormat)) { ColumnValue = Convert.ToDecimal(ObjValue).ToString(); } else { ColumnValue = Convert.ToDecimal(ObjValue).ToString(ColStruct.ColumnTextFormat); } break; } case "System.Double": { if (string.IsNullOrEmpty(ColStruct.ColumnTextFormat)) { ColumnValue = Convert.ToDouble(ObjValue).ToString(); } else { ColumnValue = Convert.ToDouble(ObjValue).ToString(ColStruct.ColumnTextFormat); } break; } case "System.Int64": { if (string.IsNullOrEmpty(ColStruct.ColumnTextFormat)) { ColumnValue = Convert.ToInt64(ObjValue).ToString(); } else { ColumnValue = Convert.ToInt64(ObjValue).ToString(ColStruct.ColumnTextFormat); } break; } case "System.Int16": { if (string.IsNullOrEmpty(ColStruct.ColumnTextFormat)) { ColumnValue = Convert.ToInt16(ObjValue).ToString(); } else { ColumnValue = Convert.ToInt16(ObjValue).ToString(ColStruct.ColumnTextFormat); } break; } case "System.Int32": { if (string.IsNullOrEmpty(ColStruct.ColumnTextFormat)) { ColumnValue = Convert.ToInt32(ObjValue).ToString(); } else { ColumnValue = Convert.ToInt32(ObjValue).ToString(ColStruct.ColumnTextFormat); } break; } case "System.DateTime": { if (string.IsNullOrEmpty(ColStruct.ColumnTextFormat)) { ColumnValue = Convert.ToDateTime(ObjValue).ToString(); } else { ColumnValue = Convert.ToDateTime(ObjValue).ToString(ColStruct.ColumnTextFormat,System.Globalization.DateTimeFormatInfo.InvariantInfo); } break; } default: { ColumnValue = ObjValue.ToString(); break; } } } return ColumnValue.Trim(); }
private static ushort GetColumnValueMaxLength(DataTable dt, ColumnStruct ColStruct) { ushort InitLenth = (ushort)System.Text.Encoding.Default.GetByteCount(ColStruct.ColumnCaption); ushort MaxLenth = InitLenth; foreach (DataRow Row in dt.Rows) { object ObjValue = Row[ColStruct.ColumnName]; if (ObjValue == null || ObjValue == DBNull.Value) { continue; } string ColumnValue = GetColumnValueFormat(dt,ColStruct,ObjValue); ushort ColumnValueLenth = (ushort)System.Text.Encoding.Default.GetByteCount(ColumnValue); MaxLenth = ColumnValueLenth > MaxLenth ? ColumnValueLenth : MaxLenth; }
if (MaxLenth == InitLenth) { //标题栏字体较大 MaxLenth += 4; } else { //内容文本前后与边框空余出一字的间隔 MaxLenth += 2; } return (ushort)(MaxLenth * 1.2); } }
页面调用ExcelHelper类中的静态方法ExportDataToExcel导出数据集中指定Table的制定列到Excel文件并输出文件到浏览器客户端。XmlManager.GetString是多语言实现的相关方法,可以直接修改为返回当前列标题字符串。 private void ExportDataToExcel(DSSummary_DetailsQuery_SellInfo ds) { System.Collections.Generic.List<ExcelHelper.TableStruct> TableInfoAry = new System.Collections.Generic.List<ExcelHelper.TableStruct>(); ExcelHelper.TableStruct TableInfo = new ExcelHelper.TableStruct(); TableInfo.TableName = ds.DS_Stock.TableName; TableInfo.TableCaption = XmlManager.GetString("Summary_DetailsQuery_ViewCarInfoCustormerDetail_TitleTxt");
ExcelHelper.ColumnStruct ColStruct = new ExcelHelper.ColumnStruct(); ColStruct.ColumnName = "C_CarNo"; ColStruct.ColumnTextFormat = string.Empty; ColStruct.ColumnCaption = XmlManager.GetString("IAMS_System_CarInfo_CarNo"); TableInfo.AddColumnInfo(ColStruct); //……添加其他列信息 TableInfoAry.Add(TableInfo); ExcelHelper.ExportToExcel(ds, TableInfoAry); } 希望可以帮到你,有什么问题可以联系我。Email:wangminghu2000@163.com
ExcelHelper office 导出的更多相关文章
- .net 开源工具集1 (SQL,报表,Cube,Office导出)
http://www.cnblogs.com/asxinyu/p/dotnet_opensource_project_3.html
- office 导出问题
就用程序池右击项目高级设置 应用程序池的项目中的标识改为 LocalSystem 启用32位应用程序设为true或false
- C#基于Office组件操作Excel
1. 内容简介 实现C#与Excel文件的交互操作,实现以下功能: a) DataTable 导出到 Excel文件 b) Model数据实体导出到 Excel文件[List&l ...
- 【netcore基础】.NET Core使用EPPlus实现MVC API里的Excel导出功能 配置中文表头
EPPlus 用来操作excel非常方便,不用依赖微软的office包,所以推荐使用. 下面是具体步骤和代码 首先用nuget安装 EPPlus.Core 我装的版本是 1.5.4 然后就可以用 Ex ...
- C# Excel操作类 ExcelHelper
实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...
- [.Net] C# Excel操作类 ExcelHelper
实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- Excel导入导出帮助类
/// <summary> /// Excel导入导出帮助类 /// 记得引入 NPOI /// 下载地址 http://npoi.codeplex.com/rele ...
- php 基于phpexcel制作的导出excel类
最近要写个项目,由于项目中导出excel太多,因此写个类便于使用. <?php /**如果是gbk的编码,请转为UTF8 *@使用方法. *引入类库. * $excel = news excel ...
随机推荐
- C# 继承(4)
接上章: class NameList { public NameList() => Console.WriteLine("这个是NameList的构造函数"); publi ...
- 1233: 传球游戏 [DP]
1233: 传球游戏 [DP] 时间限制: 1 Sec 内存限制: 128 MB 提交: 4 解决: 3 统计 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做 ...
- 网页的js源文件被加密解决方案
Firefox和Chrome都具有这个功能,而且位置几乎一致
- 【BZOJ3589】动态树 树链剖分+线段树
Description 别忘了这是一棵动态树, 每时每刻都是动态的. 小明要求你在这棵树上维护两种事件 事件0: 这棵树长出了一些果子, 即某个子树中的每个节点都会长出K个果子. 事件1: 小明希望你 ...
- 洛谷P4495 [HAOI2018]奇怪的背包(数论)
题面 传送门 题解 好神仙的思路啊--orzyyb 因为不限次数,所以一个体积为\(V_i\)的物品可以表示出所有重量为\(\gcd(V_i,P)\)的倍数的物品,而所有物品的总和就是这些所有的\(\ ...
- ubuntu15.04下安装docker
##获得更多资料欢迎进入我的网站或者 csdn或者博客园 最近听说docker很火,不知道什么东西,只知道是一个容器,可以跨平台.闲来无事,我也来倒弄倒弄.本文主要介绍:ubuntu下的安装,以及基 ...
- Visual Studio 2019 秘钥
Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 ProfessionalNYWVH-HT4X ...
- 请求一个域名ip的缓存用处
前言 摘录自操作系统,这一段的内容很有启发,稍微加上自己的理解,写一篇博客记录一下. 缓存 缓存成功解决了速度不匹配设备之间的数据传输,并且在一般情况下,是整个系统的瓶颈:缓存的出现,有效减少了低速I ...
- tornado 09 cookie和session
tornado 09 cookie和session 一.cookie #有什么办法能够让浏览器记住登录信息,下次再打开的时候可以自动登录?网站是如何记录登录信息的? class SetCookieHa ...
- Python web前端 07 函数及作用域
Python web前端 07 函数及作用域 一.函数 1.有名函数和匿名函数 #函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块 #函数就是包裹在花括号里面的代码块,前面使用了关键字fun ...