每天快乐学一句英语
posts - 45,  comments - 415,  trackbacks - 14
    连续这么多天持续写SQL,晚上找资料研究一下Microsoft Office Web Components(续上一篇Excel的文章)调节一下自己,和上一篇文章的主题一样,这篇主要研究OWC做报表的方法。先看一下示例的效果:

 

   一、主要内容:

1、 OWC组件在web页面展示的几种方法。

2、 OWC数据的填充。

3、 OWC显示格式的设置。

4、 OWC中的电子表格类中填充数据的方法。

5、 OWC中显示数据格式的控制。

二、要点总结:

1、 OWC组件在web页面展示的方法。

A、将数据导出成Excel临时文件,再将临时文件呈现到Web页面,代码如下:

 Sheet.Export(FileName, OWC11.SheetExportActionEnum.ssExportActionNone, OWC11.SheetExportFormat.ssExportHTML);//Sheet为OWC11中SpreadsheetClass类的对象
        Response.ClearContent();
        Response.ClearHeaders();
        Response.ContentType 
= "application/vnd.ms-excel";
        Response.AddHeader(
"Content-Disposition""inline;filename='我的文件'");
        Response.WriteFile(FileName);
        Response.Flush();
        Response.Close();
 

B、 不导出到本地临时文件,直接从内存加载到Web页面,代码如下:

Response.Clear();
        Response.Buffer 
= true;
        Response.ContentEncoding 
= System.Text.Encoding.Default;
        
//Response.Charset = "utf-8";
        Response.ContentType = "application/vnd.ms-excel";
        Response.Write(Sheet.HTMLData);
        
this.EnableViewState = false;
 Response.End();

       A、B效果如图

 

C、标签:

<object id="Spreadsheet1" classid="clsid:0002E559-0000-0000-C000-000000000046" name="Spreadsheet1">
       效果如图:

      2、在OWC中的电子表格类中填充数据的方法:
OWC11.SpreadsheetClass Sheet = new OWC11.SpreadsheetClass();
//第一行为报表的标题
        Sheet.ActiveCell[11= "报表的标题";

        
//逐行写入数据,数组中第一行为报表的列标题
        for (int i = 0; i < DT.Columns.Count - 3; i++)
        
{
            Sheet.Cells[
21 + i] = DT.Columns[i].Caption; ;
        }

        
        
//为报表填充数据并设置显示上下标格式
        for (int i = 0; i < DT.Rows.Count; i++)
        
{
            
for (int j = 0; j < DT.Columns.Count - 4; j++)
            
{
                Sheet.ActiveCell[
3 + i, 1 + j] = DT.Rows[i][j];
            }

            
string a = DT.Rows[i][DT.Columns.Count - 4].ToString();
            
string b = DT.Rows[i][DT.Columns.Count - 3].ToString();
            
string c = DT.Rows[i][DT.Columns.Count - 2].ToString();
            Sheet.ActiveCell[
3 + i,DT.Columns.Count - 3= a + b + c;
            Sheet.Columns.AutoFit();
    }

3、    OWC中数据显示格式的控制(没找到控制上下标格式数据的方法):
以下是对输出Excel的格式控制

     运行效果如下:

   3、图表ChartSpace类的例子,网上比较多,直接看综合示例,就不另作说明了。

三、综合示例:

  注释很全,就不加说明了。

         CS文件:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Reflection;
using System.Data.OleDb;
using System.IO;
using System.Diagnostics;
//using OWC11 = Microsoft.Office.Interop.Owc11;

public partial class Output : System.Web.UI.Page
{
    
//取数据的全局变量
    OleDbConnection Olecn;
    OleDbCommand OleCamm;
    DataTable DT 
= new DataTable();

    
//实例化OWC11
    OWC11.SpreadsheetClass Sheet = new OWC11.SpreadsheetClass();

    
//跨框架传参用
    private String StrTime = "";

    
//导出电子表格的全路径
    public String FileName;

    
//导出图片的全路径
    public String PicPath;

    
protected void Page_Load(object sender, EventArgs e)
    
{
        
//接收Input框架传递的参数
        if (!IsPostBack)
        
{
            StrTime 
= Request.QueryString["Time"];
            
if (StrTime != null)
                Label1.Text 
= "时间:" + StrTime;
        }


        
//在页面加载的时候将数据取出
        if (ConnectionDataBase())
        
{
            OleCamm 
= new OleDbCommand();
            OleCamm.Connection 
= Olecn;
            Olecn.Open();
            OleCamm.CommandText 
= "select * from pl where date = " + "'" + StrTime + "'";
            OleDbDataAdapter OleDAdp 
= new OleDbDataAdapter(OleCamm);
            OleDAdp.Fill(DT);
            Olecn.Close();
        }

        Exceltest();
        ChartsTest();
    }

    
    
/// <summary>
    
/// 连接数据库
    
/// </summary>
    
/// <returns></returns>

    private bool ConnectionDataBase()
    
{
        
try
        
{
            
string DataSource = Server.MapPath("~"+ "\\App_Data\\Excel.mdb";
            Olecn 
= new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DataSource);
            Olecn.Open();
        }

        
catch (Exception e1)
        
{
            Response.Write(e1.Message);
            
return false;
        }

        
finally
        
{
            Olecn.Close();
        }

        
return true;
    }


    
/// <summary>
    
/// OWC中SpreadsheetClass类的操作 
    
/// </summary>

    private void Exceltest()

    
{
        
//将已经打开的Excel资源释放掉
        EndExcelProcesse();

        
//第一行为报表的标题
        Sheet.ActiveCell[11= "报表的标题栏";

        
//逐行写入数据,报表的列标题
        for (int i = 0; i < DT.Columns.Count - 3; i++)
        
{
            Sheet.Cells[
21 + i] = DT.Columns[i].Caption; ;
        }

        
        
//为报表填充数据
        for (int i =