Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)delv
published in(发表于) 2014/1/23 3:13:03
Response输出可以加批注的Excel_[Asp.Net教程]

Response输出可以加批注的Excel_[Asp.Net教程]

















不调用Excel对象模型,直接用Response输出可以加批注的Excel。




代码如下:





using System;
using System.Text;
using System.Web;
using System.Web.UI;




namespace WebTest
{
/**////


/// ExcelWithComment 的摘要说明。
///

public class ResponseExcelWithComment
{
/**////
/// 当前 HttpResponse
///

private static HttpResponse Response
{
get
{
return HttpContext.Current.Response ;
}
}




/**////


/// 用于构建整个网页内容的 StringBuilder
///

private StringBuilder _htmlBuilder = new StringBuilder() ;
private StringBuilder _contentBuilder = new StringBuilder() ;




/**////


/// 准备输出的Excel的文件名,不含扩展名
///

private readonly string _fileName ;
/**////
/// Excel 作者
///

private readonly string _authorName ;

private ResponseExcelWithComment(){}
public ResponseExcelWithComment(string fileName, string authorName)
{
if (fileName == null)
{
throw new ArgumentNullException("fileName") ;
}




if (authorName == null)
{
throw new ArgumentNullException("authorName") ;
}




_fileName = fileName ;
_authorName = authorName ;
}





public void WriteResponse()
{
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition","attachment;filename=" + _fileName + ".xls");
Response.ContentEncoding = Encoding.Default ;
BuildHtml();
Response.Write(_htmlBuilder.ToString()) ;
Response.Flush() ;
Response.End() ;
}




/**////


/// 为 Body 中的 Content添加行
///

///
public void AppendBodyContent(string line)
{
if (line != null)
{
_contentBuilder.Append(line) ;
}
_contentBuilder.Append("\r\n") ;
}




/**////


/// 为 整个Html 添加一行内容
///

///
private void AppendLine(string line)
{
if (line != null)
{
_htmlBuilder.Append(line) ;
}
_htmlBuilder.Append("\r\n") ;
}




private void BuildHtml()
{
AppendLine(@"xmlns:o=""urn:schemas-microsoft-com:office:office""
xmlns:x=""urn:schemas-microsoft-com:office:excel""
xmlns=""http://www.w3.org/TR/REC-html40"">");




BuildHead();
BuildBody();




AppendLine("");
}




/**////


/// 写 部分
///

private void BuildHead()
{
AppendLine("");




BuildMeta();
BuildLink();
BuildCSS();
BuildJavascript();
BuildExcelProperties();




AppendLine((""));
}




/**////


/// 写 部分
///

private void BuildBody()
{
AppendLine("");




AppendLine(_contentBuilder.ToString());




//comment list
AppendLine(@"




");
AppendLine(_commentBuilder.ToString());
AppendLine("
");





AppendLine("");
}




Head Write Method#region Head Write Method




private int _styleIndex = 30 ;
private StringBuilder _styleBuilder = new StringBuilder() ;




/**////


/// 为单元格添加一种样式
///

/// 背景色
/// 顶部是否闭合
/// 底部是否闭合
/// 左边是否闭合
/// 右边
/// 文字大小
/// 是否为粗体
/// css类名
public string AddCellStyle(System.Drawing.Color bgColor, bool top, bool bottom, bool left, bool right, int fontSize, bool bold)
{
_styleIndex++ ;

_styleBuilder.Append(string.Format(@".xl{0}
{8}mso-style-parent:style0;
mso-pattern:auto none;
border-top:{1};
border-right:{2};
border-bottom:{3};
border-left:{4};
font-size:{5}pt;
{6}
background:{7};{9}",
_styleIndex,
top ? ".5pt solid black" : "none",
right ? ".5pt solid black" : "none",
bottom ? ".5pt solid black" : "none",
left ? ".5pt solid black" : "none",
fontSize,
bold ? "font-weight:700;" : "",
bgColor.Name,
"{",
"}")) ;
_styleBuilder.Append("\r\n") ;




return "xl" + _styleIndex.ToString() ;
}




/**////


/// 写 Meta 部分
///

private void BuildMeta()
{
AppendLine(" AppendLine("") ;
AppendLine("") ;
}




/**////


/// 写 Linked File
///

private void BuildLink()
{
AppendLine("") ;
AppendLine("") ;
AppendLine("") ;
}




private void BuildCSS()
{
string css = @"

" ;
AppendLine(css) ;
}




private void BuildJavascript()
{
AppendLine(@"





") ;
}




private void BuildExcelProperties()
{
AppendLine(string.Format(@"",
_fileName));
}




#endregion




About Comment#region About Comment





/**////


/// 批注的 Builder
///

StringBuilder _commentBuilder = new StringBuilder() ;




int curIndex = 0 ;




/**////


/// Shape Type
///

const string SHAPE_TYPE = @"


" ;




/**////


/// 添加批注
///

/// 被批注单元格从0开始所在的行索引
/// 被批注单元格从0开始所在的列索引
/// 单元格内容
/// 批注内容
/// 增加了批注后的单元格内容
public string AddComment(int row, int column, string text, string comment)
{
if (row < 0)
{
throw new ArgumentOutOfRangeException("row") ;
}
if (column < 0)
{
throw new ArgumentOutOfRangeException("column") ;
}
if (text == null)
{
throw new ArgumentNullException("text") ;
}
if (comment == null)
{
throw new ArgumentNullException("comment") ;
}




curIndex++ ;




_commentBuilder.Append(string.Format(@"







onmouseover=""msoCommentShow('_com_{0}','_anchor_{0}')""
onmouseout=""msoCommentHide('_com_{0}')"" language=JavaScript>




name=""_msocom_{0}"">[{0}]




class=shape>{4}:

{5}










",
curIndex,
(curIndex == 1 ? SHAPE_TYPE : ""),
row,
column,
_authorName,
comment)) ;




return string.Format(@"{1} class=msocomspan1> onmouseover=""msoCommentShow('_com_{0}','_anchor_{0}')""
onmouseout=""msoCommentHide('_com_{0}')"" language=JavaScript> class=msocomanch href=""#_msocom_{0}"" name=""_msoanchor_{0}"">[1]
",
curIndex,
text) ;
}





#endregion
}
}





示例:
private void Button1_Click(object sender, System.EventArgs e)
{
string fileName = "Crude_Data" ;
string authorName = "Author Name" ;
ResponseExcelWithComment excel = new ResponseExcelWithComment(fileName, authorName) ;




sqlConnection1.Open() ;
dataSet11 = new DataSet1() ;
sqlDataAdapter1.Fill(dataSet11.UserInformation) ;
sqlConnection1.Close() ;




int curRow = 0 ;
int curCol = 0 ;
string style1 = "" ;




StringBuilder tableBuilder = new StringBuilder() ;
tableBuilder.Append(@"") ;
tableBuilder.Append("") ;




style1 = excel.AddCellStyle(Color.Blue, true, true, true, true, 9, true) ;
tableBuilder.Append(string.Format("", style1)) ;
tableBuilder.Append(excel.AddComment(curRow, curCol, "User Name", "用户名")) ;
tableBuilder.Append("") ;




tableBuilder.Append(string.Format("", style1)) ;
curCol++ ;
tableBuilder.Append(excel.AddComment(curRow, curCol, "Password", "密码")) ;
tableBuilder.Append("") ;




tableBuilder.Append(string.Format("", style1)) ;
curCol++ ;
tableBuilder.Append(excel.AddComment(curRow, curCol, "Email", "电子邮件")) ;
tableBuilder.Append("") ;

tableBuilder.Append("") ;




string style2 = excel.AddCellStyle(Color.Yellow, true, true, false, false, 9, false) ;
foreach (DataSet1.UserInformationRow userRow in dataSet11.UserInformation)
{
curRow++ ;
curCol = 0 ;
tableBuilder.Append(string.Format("", style2)) ;
tableBuilder.Append(excel.AddComment(curRow, curCol, userRow.UserName, userRow.UserName)) ;
tableBuilder.Append("") ;




tableBuilder.Append(string.Format("", style2)) ;
curCol++ ;
tableBuilder.Append(excel.AddComment(curRow, curCol, userRow.Password, userRow.Password)) ;
tableBuilder.Append("") ;




tableBuilder.Append(string.Format("", style2)) ;
curCol++ ;
tableBuilder.Append(excel.AddComment(curRow, curCol, userRow.Email, userRow.Email)) ;
tableBuilder.Append("") ;

tableBuilder.Append("") ;
}




tableBuilder.Append(@"") ;




excel.AppendBodyContent(tableBuilder.ToString()) ;
excel.WriteResponse() ;
}




























If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759