在这个类中,有两个参数传进来,一个是它的数据源,另一个是整个报表的标题字符串,具体看代码就应该知道了。using System;
using System.Data;
using Excel;namespace LogicLayer
{
 /// 
 /// OutputExcel 的摘要说明
 /// 
 public class OutputExcel
 {
  public OutputExcel(DataView dv,string str)
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
   Excel.Application excel;
   int rowIndex=4;
   int colIndex=1;   Excel._Workbook xBk;
   Excel._Worksheet xSt;   excel= new Excel.ApplicationClass();;
   xBk = excel.Workbooks.Add(true);
   xSt = (Excel._Worksheet)xBk.ActiveSheet;   //
   //取得标题
   //
   foreach(DataColumn col in dv.Table.Columns)
   {
    colIndex++;
    excel.Cells[4,colIndex] = col.ColumnName;
    xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐
   }   //
   //取得表格中的数据
   //
   foreach(DataRowView row in dv)
   {
    rowIndex ++;
    colIndex = 1;
    foreach(DataColumn col in dv.Table.Columns)
    {
     colIndex ++;
     if(col.DataType == System.Type.GetType("System.DateTime"))
     {
      excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
      xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐
     }
     else
     if(col.DataType == System.Type.GetType("System.String"))
     {
      excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();
      xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐
     }
     else
     {
      excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();
     }
    }
   }
   //
   //加载一个合计行
   //
   int rowSum = rowIndex + 1;
   int colSum = 2;
   excel.Cells[rowSum,2] = "合计";
   xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
   //
   //设置选中的部分的颜色
   //
   xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
   xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种
   //
   //取得整个报表的标题
   //
   excel.Cells[2,2] = str;
   //
   //设置整个报表的标题格式
   //
   xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;
   xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;
   //
   //设置报表表格为最适应宽度
   //
   xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
   xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
   //
   //设置整个报表的标题为跨列居中
   //
   xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();
   xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenterAcrossSelection;
   //
   //绘制边框
   //
   xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
   xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[Excel.XlBordersIndex.xlEdgeLeft].Weight = Excel.XlBorderWeight.xlThick;//设置左边线加粗
   xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeTop].Weight = Excel.XlBorderWeight.xlThick;//设置上边线加粗
   xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeRight].Weight = Excel.XlBorderWeight.xlThick;//设置右边线加粗
   xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight = Excel.XlBorderWeight.xlThick;//设置下边线加粗
   //
   //显示效果
   //
   excel.Visible=true;
  }
 }
}
有人在问,如何结束Excel进程?
可以强制结束进程:)
一般采用垃圾自动回收的技术,但为了更彻底地结束Excel进程。我们可以再加上一个事件:判断Excel是否还在进程集里面。如果有的话,返回true;当然,如果没有的话,返回false。
当事件为真的时候,采用强制进程杀死技术就行了。
如果要判断Excel是否在进程集里面,可以参考下面的代码:
            int ProceedingCount = 0;
            Process[] ProceddingCon = Process.GetProcesses();
            foreach(Process IsProcedding in ProceddingCon)
            {
                if(IsProcedding.ProcessName == "Excel")
                {
                    ProceedingCount += 1;
                }
            }
            if(ProceedingCount > 0)
            {
                MessageBox.Show("该系统中已经在运行Excel了。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return true;
            }
else
{
return false;
}
  }
==================
要杀死进程的话,用一个叫什么Kill()的事件吧。好象是这样的。:)

解决方案 »

  1.   

    在这个类中,有两个参数传进来,一个是它的数据源,另一个是整个报表的标题字符串,具体看代码就应该知道了。using System;
    using System.Data;
    using Excel;namespace LogicLayer
    {
     /// 
     /// OutputExcel 的摘要说明
     /// 
     public class OutputExcel
     {
      public OutputExcel(DataView dv,string str)
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
       Excel.Application excel;
       int rowIndex=4;
       int colIndex=1;   Excel._Workbook xBk;
       Excel._Worksheet xSt;   excel= new Excel.ApplicationClass();;
       xBk = excel.Workbooks.Add(true);
       xSt = (Excel._Worksheet)xBk.ActiveSheet;   //
       //取得标题
       //
       foreach(DataColumn col in dv.Table.Columns)
       {
        colIndex++;
        excel.Cells[4,colIndex] = col.ColumnName;
        xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐
       }   //
       //取得表格中的数据
       //
       foreach(DataRowView row in dv)
       {
        rowIndex ++;
        colIndex = 1;
        foreach(DataColumn col in dv.Table.Columns)
        {
         colIndex ++;
         if(col.DataType == System.Type.GetType("System.DateTime"))
         {
          excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
          xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐
         }
         else
         if(col.DataType == System.Type.GetType("System.String"))
         {
          excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();
          xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐
         }
         else
         {
          excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();
         }
        }
       }
       //
       //加载一个合计行
       //
       int rowSum = rowIndex + 1;
       int colSum = 2;
       excel.Cells[rowSum,2] = "合计";
       xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
       //
       //设置选中的部分的颜色
       //
       xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
       xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种
       //
       //取得整个报表的标题
       //
       excel.Cells[2,2] = str;
       //
       //设置整个报表的标题格式
       //
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;
       //
       //设置报表表格为最适应宽度
       //
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
       //
       //设置整个报表的标题为跨列居中
       //
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();
       xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenterAcrossSelection;
       //
       //绘制边框
       //
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
       xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[Excel.XlBordersIndex.xlEdgeLeft].Weight = Excel.XlBorderWeight.xlThick;//设置左边线加粗
       xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeTop].Weight = Excel.XlBorderWeight.xlThick;//设置上边线加粗
       xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeRight].Weight = Excel.XlBorderWeight.xlThick;//设置右边线加粗
       xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight = Excel.XlBorderWeight.xlThick;//设置下边线加粗
       //
       //显示效果
       //
       excel.Visible=true;
      }
     }
    }
    有人在问,如何结束Excel进程?
    可以强制结束进程:)
    一般采用垃圾自动回收的技术,但为了更彻底地结束Excel进程。我们可以再加上一个事件:判断Excel是否还在进程集里面。如果有的话,返回true;当然,如果没有的话,返回false。
    当事件为真的时候,采用强制进程杀死技术就行了。
    如果要判断Excel是否在进程集里面,可以参考下面的代码:
                int ProceedingCount = 0;
                Process[] ProceddingCon = Process.GetProcesses();
                foreach(Process IsProcedding in ProceddingCon)
                {
                    if(IsProcedding.ProcessName == "Excel")
                    {
                        ProceedingCount += 1;
                    }
                }
                if(ProceedingCount > 0)
                {
                    MessageBox.Show("该系统中已经在运行Excel了。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    return true;
                }
    else
    {
    return false;
    }
      }
    ==================
    要杀死进程的话,用一个叫什么Kill()的事件吧。好象是这样的。:)
      

  2.   

    先注册excel.dll,然后在程序中调用即可!
      

  3.   

    excel就是一个com,你可以直接使用。