----这个是一个报表页面后台代码,在web页面引入 webbrowser 控件
通过 webbrowser 实现打印,导出
public partial class FrmStoreReport : Form
{
private string _printHtml = string.Empty;
private string _printContent = string.Empty;
public FrmStoreReport()
{
InitializeComponent();
}
private void FrmStoreReport_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
ConstructHtmlString();
wbReportView.DocumentText = _printHtml;
}
#region 打印相关
/// <summary>
/// 打印字符串
/// </summary>
/// <param name="htmltable">待打印的字符串,包括表格的样式等</param>
/// <param name="key">1、打印(默认);2、直接打印;3、打印预览;4、打印设置</param>
/// <returns></returns>
public string StringPrint(string htmltable, int key)
{
StringBuilder sb = new StringBuilder();
string Htmls = "";
sb.Append(htmltable);
switch (key)
{
case 1://打印
sb.Append("<script languge='javascript'>WebBrowser.ExecWB(6,1); window.opener=null;</script>"); break;
case 2://直接打印
sb.Append("<script languge='javascript'>WebBrowser.ExecWB(6,6); window.opener=null;</script>"); break;
case 3://打印预览
sb.Append("<script languge='javascript'>WebBrowser.ExecWB(7,1); window.opener=null;</script>"); break;
case 4://打印设置
sb.Append("<script languge='javascript'>WebBrowser.ExecWB(8,1); window.opener=null;</script>"); break;
default: //打印
sb.Append("<script languge='javascript'>WebBrowser.ExecWB(6,1); window.opener=null;</script>"); break;
}
Htmls = sb.ToString();
return (Htmls);
}
#region 打印html Header,style 定义
protected const string HEADER = "<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">" +
"<meta http-equiv=Content-Type content=\"text/html; charset=\"gb2312\">" +
"<head>" +
"<!--[if gte mso 9]><xml>" +
"<x:ExcelWorkbook>" +
"<x:ExcelWorksheets>" +
"<x:ExcelWorksheet>" +
"<x:Name>工作表标题</x:Name>" +
"<x:WorksheetOptions>" +
"<x:Print>" +
"<x:ValidPrinterInfo />" +
"</x:Print>" +
"</x:WorksheetOptions>" +
"</x:ExcelWorksheet>" +
"</x:ExcelWorksheets>" +
"</x:ExcelWorkbook>" +
"</xml>" +
"<![endif]-->";
const string STYLE = "<style type=\"text/css\">" +
".spercent" +
" {" +
" background-color:#ffff99;" +
" mso-number-format:0.00%;" +
" }" +
".sId" +
" {" +
" background-color:#ff6633;" +
" mso-number-format:0;" +
" }" +
".sName" +
" {" +
" color:red;" +
" }" +
".sValue" +
" {" +
" color:blue;" +
" mso-number-format:0;" +
" }" +
"</style>";
#endregion
private void ConstructHtmlString()
{
StringBuilder sbHtml =new StringBuilder();
StringBuilder sbContent = new StringBuilder();
sbHtml.Append(HEADER);
sbHtml.Append(STYLE);
sbHtml.Append("</head><body>");
sbHtml.Append("<object ID='WebBrowser' WIDTH='0' HEIGHT='0' CLASSID='CLSID:
sbContent.Append("<table border=\"1\" style=\"font-size:
sbContent.Append("<th>ID</th>");
sbContent.Append("<th>Name</th>");
sbContent.Append("<th>Value</th>");
sbContent.Append("<th>Percent</th>");
for (int row = 1; row < 50; row++)
{
sbContent.Append("<tr>");
sbContent.Append(string.Format("<td class=\"sId\">{0}</td>", row));
sbContent.Append(string.Format("<td class=\"sName\">{0}</td>", Guid.NewGuid().ToString()));
sbContent.Append(string.Format("<td class=\"sValue\">{0}</td>", new Random().Next()));
sbContent.Append(string.Format("<td class=\"spercent\">{0}</td>", new Random().NextDouble()));
sbContent.Append("</tr>");
sbContent.Append("<tr><td colspan='4'>dfdfdfd</td></tr>");
}
sbContent.Append("</table>");
sbHtml.Append(sbContent.ToString() + "</body>");
_printContent = sbHtml.ToString();
_printHtml = _printContent+"</html>";
}
#endregion
private void btnExport_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.DefaultExt = "xls";
sfd.Filter = "Excel文件|*.xls";
sfd.FileName = dateTimePicker1.Value.ToString("yyyy-MM") + "库存报表";
if (sfd.ShowDialog()== DialogResult.OK)
{
using (StreamWriter writer = new StreamWriter(sfd.FileName, true, System.Text.Encoding.GetEncoding("gb2312"), 512))
{
writer.WriteLine(_printHtml);
}
}
}
private void btnPrintSet_Click(object sender, EventArgs e)
{
wbReportView.DocumentText =StringPrint(_printHtml, 4);
}
private void btnPrintPreView_Click(object sender, EventArgs e)
{
wbReportView.DocumentText = StringPrint(_printHtml, 3);
}
private void btnPrint_Click(object sender, EventArgs e)
{
wbReportView.DocumentText = StringPrint(_printHtml, 1);
}
}
----------------通过 webbrowser 打印,html 导出excel 实现复杂报表生成复杂动态 加合并的 报表
在HTML 中用 table 画报表远比 winform 中简单多。
--效果