zoukankan      html  css  js  c++  java
  • c#关于EXCEL导出数据库的做法

    using System;
    using System.Diagnostics;
    using System.Collections;
    using System.Data;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Excel;
    using System.Data.OleDb;
    namespace Maticsoft.Common
    {
    /// <summary>
    /// 操作EXCEL导出数据报表的类
    /// Copyright (C) Maticsoft
    /// </summary>
    public class DataToExcel
    {
    public DataToExcel()
    {
    }

    #region 操作EXCEL的一个类(需要Excel.dll支持)

    private int titleColorindex = 15;
    /// <summary>
    /// 标题背景色
    /// </summary>
    public int TitleColorIndex
    {
    set { titleColorindex = value; }
    get { return titleColorindex; }
    }

    private DateTime beforeTime; //Excel启动之前时间
    private DateTime afterTime; //Excel启动之后时间

    #region 创建一个Excel示例
    /// <summary>
    /// 创建一个Excel示例
    /// </summary>
    public void CreateExcel()
    {
    Excel.Application excel = new Excel.Application();
    excel.Application.Workbooks.Add(true);
    excel.Cells[1, 1] = "第1行第1列";
    excel.Cells[1, 2] = "第1行第2列";
    excel.Cells[2, 1] = "第2行第1列";
    excel.Cells[2, 2] = "第2行第2列";
    excel.Cells[3, 1] = "第3行第1列";
    excel.Cells[3, 2] = "第3行第2列";

    //保存
    excel.ActiveWorkbook.SaveAs("./lizitt.xls", XlFileFormat.xlExcel7, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
    //打开显示
    excel.Visible = true;
    // excel.Quit();
    // excel=null;
    // GC.Collect();//垃圾回收
    }
    #endregion

    #region 将DataTable的数据导出显示为报表
    /// <summary>
    /// 将DataTable的数据导出显示为报表
    /// </summary>
    /// <param name="dt">要导出的数据</param>
    /// <param name="strTitle">导出报表的标题</param>
    /// <param name="FilePath">保存文件的路径</param>
    /// <returns></returns>
    public string OutputExcel(System.Data.DataTable dt, string strTitle, string FilePath)
    {
    beforeTime = DateTime.Now;

    Excel.Application excel;
    Excel._Workbook xBk;
    Excel._Worksheet xSt;

    int rowIndex = 4;
    int colIndex = 1;

    excel = new Excel.ApplicationClass();
    xBk = excel.Workbooks.Add(true);
    xSt = (Excel._Worksheet)xBk.ActiveSheet;

    //取得列标题
    foreach (DataColumn col in dt.Columns)
    {
    colIndex++;
    excel.Cells[4, colIndex] = col.ColumnName;

    //设置标题格式为居中对齐
    xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[4, colIndex]).Font.Bold = true;
    xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[4, colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
    xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[4, colIndex]).Select();
    xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[4, colIndex]).Interior.ColorIndex = titleColorindex;//19;//设置为浅黄色,共计有56种
    }


    //取得表格中的数据
    foreach (DataRow row in dt.Rows)
    {
    rowIndex++;
    colIndex = 1;
    foreach (DataColumn col in dt.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 =Assistant.GetConfigInt("ColorIndex");// 1;//设置为浅黄色,共计有56种

    //取得整个报表的标题
    excel.Cells[2, 2] = strTitle;

    //设置整个报表的标题格式
    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;//设置下边线加粗

    afterTime = DateTime.Now;

    //显示效果
    // excel.Visible=true;
    //excel.Sheets[0] = "sss";

    ClearFile(FilePath);
    string filename = DateTime.Now.ToString("yyyyMMddHHmmssff") + ".xls";
    excel.ActiveWorkbook.SaveAs(FilePath + filename, Excel.XlFileFormat.xlExcel7, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);

    //打开显示
    //excel.Visible = true;
    // excel.Quit();
    // excel=null;
    // GC.Collect();//垃圾回收
    //wkbNew.SaveAs strBookName;
    //excel.Save(strExcelFileName);

    #region 结束Excel进程

    //需要对Excel的DCOM对象进行配置:dcomcnfg


    //excel.Quit();
    //excel=null;

    xBk.Close(null, null, null);
    excel.Workbooks.Close();
    excel.Quit();


    //注意:这里用到的所有Excel对象都要执行这个操作,否则结束不了Excel进程
    // if(rng != null)
    // {
    // System.Runtime.InteropServices.Marshal.ReleaseComObject(rng);
    // rng = null;
    // }
    // if(tb != null)
    // {
    // System.Runtime.InteropServices.Marshal.ReleaseComObject(tb);
    // tb = null;
    // }
    if (xSt != null)
    {
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);
    xSt = null;
    }
    if (xBk != null)
    {
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
    xBk = null;
    }
    if (excel != null)
    {
    System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
    excel = null;
    }
    GC.Collect();//垃圾回收
    #endregion

    return filename;

    }
    #endregion

    #region Kill Excel进程

    /// <summary>
    /// 结束Excel进程
    /// </summary>
    public void KillExcelProcess()
    {
    Process[] myProcesses;
    DateTime startTime;
    myProcesses = Process.GetProcessesByName("Excel");

    //得不到Excel进程ID,暂时只能判断进程启动时间
    foreach (Process myProcess in myProcesses)
    {
    startTime = myProcess.StartTime;
    if (startTime > beforeTime && startTime < afterTime)
    {
    myProcess.Kill();
    }
    }
    }
    #endregion

    #endregion

    #region 将DataTable的数据导出显示为报表(不使用Excel对象,使用COM.Excel)

    #region 使用示例
    /*使用示例:
    * DataSet ds=(DataSet)Session["AdBrowseHitDayList"];
    string ExcelFolder=Assistant.GetConfigString("ExcelFolder");
    string FilePath=Server.MapPath(".")+"\"+ExcelFolder+"\";

    //生成列的中文对应表
    Hashtable nameList = new Hashtable();
    nameList.Add("ADID", "广告编码");
    nameList.Add("ADName", "广告名称");
    nameList.Add("year", "年");
    nameList.Add("month", "月");
    nameList.Add("browsum", "显示数");
    nameList.Add("hitsum", "点击数");
    nameList.Add("BrowsinglIP", "独立IP显示");
    nameList.Add("HitsinglIP", "独立IP点击");
    //利用excel对象
    DataToExcel dte=new DataToExcel();
    string filename="";
    try
    {
    if(ds.Tables[0].Rows.Count>0)
    {
    filename=dte.DataExcel(ds.Tables[0],"标题",FilePath,nameList);
    }
    }
    catch
    {
    //dte.KillExcelProcess();
    }

    if(filename!="")
    {
    Response.Redirect(ExcelFolder+"\"+filename,true);
    }
    *
    * */

    #endregion

    /// <summary>
    /// 将DataTable的数据导出显示为报表(不使用Excel对象)
    /// </summary>
    /// <param name="dt">数据DataTable</param>
    /// <param name="strTitle">标题</param>
    /// <param name="FilePath">生成文件的路径</param>
    /// <param name="nameList"></param>
    /// <returns></returns>
    public string DataExcel(System.Data.DataTable dt, string strTitle, string FilePath, Hashtable nameList)
    {
    COM.Excel.cExcelFile excel = new COM.Excel.cExcelFile();
    ClearFile(FilePath);
    string filename = DateTime.Now.ToString("yyyyMMddHHmmssff") + ".xls";
    excel.CreateFile(FilePath + filename);
    excel.PrintGridLines = false;

    COM.Excel.cExcelFile.MarginTypes mt1 = COM.Excel.cExcelFile.MarginTypes.xlsTopMargin;
    COM.Excel.cExcelFile.MarginTypes mt2 = COM.Excel.cExcelFile.MarginTypes.xlsLeftMargin;
    COM.Excel.cExcelFile.MarginTypes mt3 = COM.Excel.cExcelFile.MarginTypes.xlsRightMargin;
    COM.Excel.cExcelFile.MarginTypes mt4 = COM.Excel.cExcelFile.MarginTypes.xlsBottomMargin;

    double height = 1.5;
    excel.SetMargin(ref mt1, ref height);
    excel.SetMargin(ref mt2, ref height);
    excel.SetMargin(ref mt3, ref height);
    excel.SetMargin(ref mt4, ref height);

    COM.Excel.cExcelFile.FontFormatting ff = COM.Excel.cExcelFile.FontFormatting.xlsNoFormat;
    string font = "宋体";
    short fontsize = 9;
    excel.SetFont(ref font, ref fontsize, ref ff);

    byte b1 = 1,
    b2 = 12;
    short s3 = 12;
    excel.SetColumnWidth(ref b1, ref b2, ref s3);

    string header = "页眉";
    string footer = "页脚";
    excel.SetHeader(ref header);
    excel.SetFooter(ref footer);


    COM.Excel.cExcelFile.ValueTypes vt = COM.Excel.cExcelFile.ValueTypes.xlsText;
    COM.Excel.cExcelFile.CellFont cf = COM.Excel.cExcelFile.CellFont.xlsFont0;
    COM.Excel.cExcelFile.CellAlignment ca = COM.Excel.cExcelFile.CellAlignment.xlsCentreAlign;
    COM.Excel.cExcelFile.CellHiddenLocked chl = COM.Excel.cExcelFile.CellHiddenLocked.xlsNormal;

    // 报表标题
    int cellformat = 1;
    // int rowindex = 1,colindex = 3;
    // object title = (object)strTitle;
    // excel.WriteValue(ref vt, ref cf, ref ca, ref chl,ref rowindex,ref colindex,ref title,ref cellformat);

    int rowIndex = 1;//起始行
    int colIndex = 0;

    //取得列标题
    foreach (DataColumn colhead in dt.Columns)
    {
    colIndex++;
    string name = colhead.ColumnName.Trim();
    object namestr = (object)name;
    IDictionaryEnumerator Enum = nameList.GetEnumerator();
    while (Enum.MoveNext())
    {
    if (Enum.Key.ToString().Trim() == name)
    {
    namestr = Enum.Value;
    }
    }
    excel.WriteValue(ref vt, ref cf, ref ca, ref chl, ref rowIndex, ref colIndex, ref namestr, ref cellformat);
    }

    //取得表格中的数据
    foreach (DataRow row in dt.Rows)
    {
    rowIndex++;
    colIndex = 0;
    foreach (DataColumn col in dt.Columns)
    {
    colIndex++;
    if (col.DataType == System.Type.GetType("System.DateTime"))
    {
    object str = (object)(Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd"); ;
    excel.WriteValue(ref vt, ref cf, ref ca, ref chl, ref rowIndex, ref colIndex, ref str, ref cellformat);
    }
    else
    {
    object str = (object)row[col.ColumnName].ToString();
    excel.WriteValue(ref vt, ref cf, ref ca, ref chl, ref rowIndex, ref colIndex, ref str, ref cellformat);
    }
    }
    }
    int ret = excel.CloseFile();

    // if(ret!=0)
    // {
    // //MessageBox.Show(this,"Error!");
    // }
    // else
    // {
    // //MessageBox.Show(this,"请打开文件c:\test.xls!");
    // }
    //打开显示
    return filename;

    }

    #endregion

    #region 清理过时的Excel文件

    private void ClearFile(string FilePath)
    {
    String[] Files = System.IO.Directory.GetFiles(FilePath);
    if (Files.Length > 10)
    {
    for (int i = 0; i < 10; i++)
    {
    try
    {
    System.IO.File.Delete(Files[i]);
    }
    catch
    {
    }

    }
    }
    }
    #endregion


    public DataSet ExecleDs(string filenameurl)
    {
    filenameurl = "D:/cypShow/file/test.xls";

    string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" +filenameurl+ ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
    OleDbConnection conn = new OleDbConnection(strConn);
    OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]",conn);
    DataSet ds = new DataSet();
    odda.Fill(ds);
    return ds;
    }


    }
    }

  • 相关阅读:
    python调webservice和COM接口
    [转]Python存取XML方法简介
    python中json的操作示例
    [转]PictureEx.h和PictureEx.cpp源文件
    WebBrowser中取对应的图片资源
    #pragma section
    python调win32api调整屏幕分辨率
    徐思201771010132《面向对象程序设计(Java)》第十二周学习总结
    徐思/杨玲《面向对象程序设计(Java)》第十一周学习总结
    徐思201771010132《面向对象程序设计(java)》第十周学习总结
  • 原文地址:https://www.cnblogs.com/lizihong/p/4073504.html
Copyright © 2011-2022 走看看