Files
g.hnyhua.cn/Mtxfw.Utility/ExcelHelper.cs
2026-02-07 15:48:27 +08:00

185 lines
6.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web;
using System.Data;
namespace Mtxfw.Utility
{
public class ExcelHelper
{
#region (excel文件)
public static void CreateExcelNow(DataTable dt, string ExcelPathName, string DataKey)
{
try
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; //申明传输类型
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + ExcelPathName);//输出文件名
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
StringWriter sw = new StringWriter();
int coluCount = dt.Columns.Count;
//字段标题
if (coluCount > 0)
{
if (DataKey.Contains(","))
{
string[] array = Utils.SplitString(DataKey, ",");
foreach (string s in array)
{
sw.Write(s);
sw.Write("\t");
}
sw.WriteLine();
}
else
{
sw.WriteLine(DataKey);
}
}
int rowCount = dt.Rows.Count;
if (rowCount > 0)
{
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < coluCount; j++)
{
sw.Write(dt.Rows[i][j].ToString());
sw.Write("\t");
}
sw.WriteLine();
}
}
HttpContext.Current.Response.Write(sw);
HttpContext.Current.Response.End();
}
catch { }
}
#endregion
#region ()
/// <summary>
/// 生成 Excel 文件并保存到服务器端
/// </summary>
/// <param name="dt">数据</param>
/// <param name="ExcelPathName">生成Excel文件的文件名</param>
/// <param name="DataKey">列名集合(格式是"客户名称\t客户类型\t所在地区\t结算类型")</param>
/// <returns>返回Excel文件的相对路径地址</returns>
public static string CreateExcel(DataTable dt, string ExcelPathName, string DataKey)
{
try
{
StringBuilder sb = new StringBuilder();
int coluCount = dt.Columns.Count;
//字段标题
if (coluCount > 0)
{
if (DataKey.Contains(","))
{
string[] array = Utils.SplitString(DataKey, ",");
foreach (string s in array)
{
sb.Append(s);
sb.Append("\t");
}
sb.AppendLine();
}
else
{
sb.AppendLine(DataKey);
}
}
int rowCount = dt.Rows.Count;
if (rowCount > 0)
{
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < coluCount; j++)
{
sb.Append(dt.Rows[i][j].ToString());
sb.Append("\t");
}
sb.AppendLine();
}
}
// 保存到服务器端
string relativePath = "/dd/Dw_Datadd";
string absolutePath = HttpContext.Current.Server.MapPath(relativePath);
// 确保目录存在
if (!Directory.Exists(absolutePath))
{
Directory.CreateDirectory(absolutePath);
}
// 生成文件名(如果文件名没有扩展名,则添加.xls
string fileName = ExcelPathName;
if (!fileName.EndsWith(".xls") && !fileName.EndsWith(".xlsx"))
{
fileName += ".xls";
}
// 如果文件已存在,添加时间戳
string fullPath = Path.Combine(absolutePath, fileName);
if (File.Exists(fullPath))
{
string fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileName);
string extension = Path.GetExtension(fileName);
fileName = string.Format("{0}_{1}{2}", fileNameWithoutExt, DateTime.Now.ToString("yyyyMMddHHmmssfff"), extension);
fullPath = Path.Combine(absolutePath, fileName);
}
// 写入文件
File.WriteAllText(fullPath, sb.ToString(), Encoding.GetEncoding("GB2312"));
// 返回相对路径
return relativePath + fileName;
}
catch
{
return string.Empty;
}
}
#endregion
#region
#endregion
/// <summary>
/// add by pld 20140117
/// </summary>
/// <param name="sb">excel内容字符串</param>
/// <paramname="FileName">文件名</param>
public static void Exportxls(string sb, String FileName)
{
//当前对话
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
//IO用于导出并返回excel文件
System.IO.StringWriter strWriter = null;
System.Web.UI.HtmlTextWriter htmlWriter = null;
if (sb != null)
{
//设置编码和附件格式
//System.Web.HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8)作用是方式中文文件名乱码
curContext.Response.AddHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");
curContext.Response.ContentType = "application/vnd.ms-word";
curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
curContext.Response.Charset = "GB2312";
//导出Excel文件
strWriter = new System.IO.StringWriter();
htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
curContext.Response.Write(sb);
curContext.Response.End();
}
}
}
}