C#没有装office进行Excel的导出

导出Excel的格式

//标题的定义
            ExcelHead[] excel ={
             new ExcelHead() { Title = "时间", Field = "Time", TypeCell = TypeEnum.String },
             new ExcelHead() { Title = "编号", Field = "Number", TypeCell = TypeEnum.String },
             new ExcelHead() { Title = "计划", Field = "Plan", TypeCell = TypeEnum.String },
            new ExcelHead() { Title = "完成情况", Field = "Completion", TypeCell = TypeEnum.String },
            new ExcelHead() { Title = "是否完成", Field = "IsComplete", TypeCell = TypeEnum.String },
            new ExcelHead() { Title = "星期", Field = "Week", TypeCell = TypeEnum.String }
         };
            ExcelSheet sheet = new ExcelSheet("工作日志", excel);
            ExcelSet set = new ExcelSet();//创建excel
            set.add(sheet);//工作簿名称,必填
            set.Name = "dsa";//excel名称,必填
            foreach (WorkLogMode item in listWorkMode)
            {
                ExcelRow row = new ExcelRow();
                ExcelCell cellTime = new ExcelCell("Time", item.Time);
                ExcelCell cellNumber = new ExcelCell("Number", item.Number);
                ExcelCell cellPlan = new ExcelCell("Plan", item.Plan);
                ExcelCell cellCompletion = new ExcelCell("Completion", item.Completion);
                ExcelCell cellIsComplete = new ExcelCell("IsComplete", item.IsComplete);
                int iWeek = (int)Convert.ToDateTime(item.Time).DayOfWeek;
                //星期几
                string week = DateHandle.Week(iWeek);
                ExcelCell cellWeek = new ExcelCell("Week", week);
                row.add(cellTime);
                row.add(cellNumber);
                row.add(cellPlan);
                row.add(cellCompletion);
                row.add(cellIsComplete);
                row.add(cellWeek);
                sheet.add(row);
            }
            set.Save(path);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
/// <summary>
///Excel的单元格
/// </summary>
public class ExcelCell : IExcelCell
{
    public string Key { set; get; }
    public string Value { set; get; }
    public ExcelCell(string key,string value)
    {
        Key = key;
        Value = value; 
    }
    public ExcelCell(string key, string value, string styleID)
    {
        Key = key;
        Value = value;
        StyleID = styleID;
    }
    public ExcelCell(string key, string value, TypeEnum typeCell, string styleID)
    {
        Key = key;
        Value = value;
        TypeCell = typeCell;
        StyleID = styleID;
    }
    public ExcelCell(string key, string value, TypeEnum typeCell)
    {
        Key = key;
        Value = value;
        TypeCell = typeCell;
    }
    public ExcelCell(string key, string value, TypeEnum typeCell, Dictionary<string, string> displayContent)
    {
        Key = key;
        Value = value;
        TypeCell = typeCell;
        DisplayContent = displayContent;
    }
    public StringBuilder getCell()
    {
        StringBuilder builderCell=new StringBuilder();
        if (StyleID==null)//查看有无样式
        {
            builderCell.Append("<Cell>");
        }
        else
        {
            builderCell.Append("<Cell ss:StyleID=\"" + StyleID + "\">");
        }
        if (TypeCell.ToString()=="")
        {
            TypeCell = TypeEnum.String;
        }
        string value = Value;
        if (DisplayContent!=null)
        {
            foreach (KeyValuePair<string, string> key1 in DisplayContent)
            {
                if (key1.Key.ToUpper()==Value.ToUpper())
                {
                    value=key1.Value;
                }
            }
        }
        builderCell.Append(string.Format("<Data ss:Type=\"{0}\">{1}</Data>", TypeCell, value));
      
        
        builderCell.Append("</Cell>");
        return builderCell;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;

/// <summary>
///ExcelData 的摘要说明
/// </summary>
public class ExcelHead:IExcelCell
{
    /// <summary>
    /// 标题
    /// </summary>
    public string Title { set; get; }
    /// <summary>
    /// 字段
    /// </summary>
    public string Field { set; get; } 

    public ExcelHead(string title, string field, TypeEnum type)
    {
        
        Title = title;
        field = Field;
        TypeCell = type;
    }
    public ExcelHead(string title, string field, TypeEnum type, Dictionary<string, string> displayContent)
    {
        Title = title;
        field = Field;
        TypeCell = type;
        DisplayContent = displayContent;
    }
    public ExcelHead(string title, string field)
    {
        Title = title;
        field = Field;
        TypeCell = TypeEnum.String;
    }
    public ExcelHead(string title, string field, Dictionary<string, string> displayContent)
    {
        Title = title;
        field = Field;
        TypeCell = TypeEnum.String;
        DisplayContent = displayContent;
    }
    public ExcelHead() { }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;

/// <summary>
///ExcelRow 的摘要说明
/// </summary>
public class ExcelRow
{
    private List<ExcelCell> listCell;
    public ExcelRow()
    {
        listCell = new List<ExcelCell>();
    }
    public void add(ExcelCell cell)
    {
        listCell.Add(cell); 
    }
    public int count()
    {
        return listCell.Count;
    }
    public StringBuilder getRow(ExcelHead[] head)
    {
        StringBuilder builderRow = new StringBuilder();
        builderRow.Append(" <Row ss:AutoFitHeight=\"0\">");
        for (int i = 0; i < head.Length; i++)
        {
            for (int j = 0; j < listCell.Count; j++)
            {
                if (head[i].Field == listCell[j].Key)
                {
                    ExcelCell cell = listCell[j];
                    cell.DisplayContent = head[i].DisplayContent;
                    builderRow.Append(cell.getCell());
                }
            }
        }
        builderRow.Append("</Row>");
        return builderRow;
    }
    public ExcelCell[] cells
    {
        get
        {
            ExcelCell[] cell = new ExcelCell[listCell.Count];
            for (int i = 0; i < listCell.Count; i++)
            {
                cell[i] = listCell[i];
            }
            return cell;
        }
    }
    public ExcelCell this[string StrCell]
    {
        get
        {
            ExcelCell cell = listCell.Find(c => c.Key == StrCell);
            return cell;
        }
    }
    public ExcelCell this[int intCell]
    {
        get
        {
            ExcelCell cell = listCell[intCell];
            return cell;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Runtime.Serialization;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Diagnostics;

/// <summary>
///ExcelSet 的摘要说明
/// </summary>
public class ExcelSet
{
    public string Name { set; get; }
    private StringBuilder OutFileContent = new StringBuilder();
    private List<ExcelSheet> listSheet;
    public ExcelSet()
    {
        listSheet = new List<ExcelSheet>();
    }
    public void add(ExcelSheet sheet)
    {
        listSheet.Add(sheet);
    }
    public void Save(string path)
    {
        OutFileContent = AddHeadFile(OutFileContent);
        for (int i = 0; i < listSheet.Count; i++)
        {
            OutFileContent.Append(listSheet[i].getExcelSheet());
        }
        OutFileContent = AddEndFile(OutFileContent);
        IFormatter formatter = new BinaryFormatter();
        //创建一个文件流
        FileStream stream = new FileStream(path,
            FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
        StreamWriter mySw = new StreamWriter(stream);
        string a= stream.Name;
        
        mySw.Write(OutFileContent);
        
        mySw.Close(); 
        //formatter.Serialize(stream, OutFileContent);
        stream.Dispose();
        stream.Close();
    }
    //public void show()
    //{
    //    OutFileContent = AddHeadFile(OutFileContent);
    //    for (int i = 0; i < listSheet.Count; i++)
    //    {
    //        OutFileContent.Append(listSheet[i].getExcelSheet());
    //    }
    //    OutFileContent = AddEndFile(OutFileContent);
    //    HttpContext.Current.Response.Clear();
    //    HttpContext.Current.Response.Buffer = true;
    //    HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
    //    string httpType = HttpContext.Current.Request.Browser.Browser;
    //    if (httpType == "IE")
    //    {
    //        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" +
    //        System.Web.HttpUtility.UrlEncode(Name, System.Text.Encoding.UTF8) + ".xls");
    //    }
    //    else if (httpType == "Firefox")
    //    {
    //        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + Name + ".xls");
    //    }
    //    HttpContext.Current.Response.Charset = "GB2312";
    //    HttpContext.Current.Response.Write(OutFileContent.ToString());
    //    HttpContext.Current.Response.End();
    //}
    /// <summary>
    ///excel表头
    /// </summary>
    /// <param name="OutFileContent"></param>
    /// <returns></returns>
    private static StringBuilder AddHeadFile(StringBuilder OutFileContent)
    {
        OutFileContent.Append("<?xml version=\"1.0\"?>\r\n");
        OutFileContent.Append("<?mso-application progid=\"Excel.Sheet\"?>\r\n");
        OutFileContent.Append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n");
        OutFileContent.Append(" xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n");
        OutFileContent.Append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\r\n");
        OutFileContent.Append(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n");
        OutFileContent.Append(" xmlns:html=\"http://www.w3.org/TR/REC-html40\">\r\n");
        OutFileContent.Append(" <DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">\r\n");
        OutFileContent.Append("  <Author>panss</Author>\r\n");
        OutFileContent.Append("  <LastAuthor>Оґ¶ЁТе</LastAuthor>\r\n");
        OutFileContent.Append("  <Created>2004-12-31T03:40:31Z</Created>\r\n");
        OutFileContent.Append("  <Company>Prcedu</Company>\r\n");
        OutFileContent.Append("  <Version>12.00</Version>\r\n");
        OutFileContent.Append(" </DocumentProperties>\r\n");
        OutFileContent.Append(" <OfficeDocumentSettings xmlns=\"urn:schemas-microsoft-com:office:office\">\r\n");
        OutFileContent.Append("  <DownloadComponents/>\r\n");
        //OutFileContent.Append("  <LocationOfComponents HRef=\"file:///F:\\Tools\\OfficeXP\\OfficeXP\\\"/>\r\n");
        OutFileContent.Append(" </OfficeDocumentSettings>\r\n");
        OutFileContent.Append(" <ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">\r\n");
        OutFileContent.Append("  <WindowHeight>9000</WindowHeight>\r\n");
        OutFileContent.Append("  <WindowWidth>10620</WindowWidth>\r\n");
        OutFileContent.Append("  <WindowTopX>480</WindowTopX>\r\n");
        OutFileContent.Append("  <WindowTopY>45</WindowTopY>\r\n");
        OutFileContent.Append("  <ProtectStructure>False</ProtectStructure>\r\n");
        OutFileContent.Append("  <ProtectWindows>False</ProtectWindows>\r\n");
        OutFileContent.Append(" </ExcelWorkbook>\r\n");
        OutFileContent.Append(" <Styles>\r\n");
        OutFileContent.Append("  <Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n");
        OutFileContent.Append("   <Alignment ss:Vertical=\"Center\" />\r\n");
        OutFileContent.Append("   <Borders/>\r\n");
        OutFileContent.Append("   <Font ss:FontName=\"ЛОМе\" x:CharSet=\"134\" ss:Size=\"12\"/>\r\n");
        OutFileContent.Append("   <Interior/>\r\n");
        OutFileContent.Append("   <NumberFormat/>\r\n");
        OutFileContent.Append("   <Protection/>\r\n");
        OutFileContent.Append("  </Style>\r\n");
        OutFileContent.Append("  <Style ss:ID=\"s62\">\r\n");
        OutFileContent.Append("   <Alignment ss:Vertical=\"Center\" ss:Horizontal=\"Center\" ss:WrapText=\"1\"/>\r\n");
        OutFileContent.Append("   <Font ss:FontName=\"ЛОМе\" x:CharSet=\"134\" ss:Size=\"9\"/>\r\n");
        OutFileContent.Append("  </Style>\r\n");
        OutFileContent.Append("  <Style ss:ID=\"s74\">\r\n");
        OutFileContent.Append("   <Alignment ss:Horizontal=\"Center\" ss:Vertical=\"Center\"/>\r\n");
        OutFileContent.Append("   <Borders>\r\n");
        OutFileContent.Append("  <Border ss:Position=\"Bottom\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\r\n");
        OutFileContent.Append("  <Border ss:Position=\"Left\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\r\n");
        OutFileContent.Append("  <Border ss:Position=\"Right\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\r\n");
        OutFileContent.Append("  <Border ss:Position=\"Top\" ss:LineStyle=\"Continuous\" ss:Weight=\"1\"/>\r\n");
        OutFileContent.Append("  </Borders>\r\n");
        OutFileContent.Append("   <Font ss:FontName=\"ЛОМе\" x:CharSet=\"134\" ss:Size=\"12\" ss:Bold=\"1\"/>\r\n");
        OutFileContent.Append("   <Interior ss:Color=\"#BFBFBF\" ss:Pattern=\"Solid\"/>\r\n");
        OutFileContent.Append("  </Style>\r\n");
        OutFileContent.Append(" </Styles>\r\n");
        return OutFileContent;
    }
    /// <summary>
    /// excel表尾
    /// </summary>
    /// <param name="OutFileContent"></param>
    /// <returns></returns>
    private static StringBuilder AddEndFile(StringBuilder OutFileContent)
    {
        OutFileContent.Append("</Workbook>\r\n");
        return OutFileContent;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Data;
/// <summary>
///ExcelSeet 的摘要说明
/// </summary>
public class ExcelSheet
{
    /// <summary>
    /// 标题
    /// </summary>
    public ExcelHead[] Head;
    public string Name { set; get; }
    /// <summary>
    ///是否添加表格样式
    /// </summary> 
    public bool IsTableStyle { set; get; }
    public ExcelSheet(string name, ExcelHead[] head)
    {
        Head = head;
        Name = name;
    }
    public ExcelSheet(string name, ExcelHead[] head, DataTable dt)
    {
        Head = head;
        Name = name;
        //写内容
        foreach (DataRow row in dt.Rows)
        {
            ExcelRow excelRow = new ExcelRow();
            for (int i = 0; i < Head.Length; i++)
            {
                if (Head[i].TypeCell.Equals(""))
                {
                    Head[i].TypeCell = TypeEnum.String;
                }
                ExcelCell cell = new ExcelCell(Head[i].Field, row[Head[i].Field].ToString(), Head[i].TypeCell);
                excelRow.add(cell);
            }
            listRow.Add(excelRow);
        }
    }
    public ExcelSheet(DataTable dt) 
    {
        foreach (DataRow row in dt.Rows)
        {
            ExcelRow excelRow = new ExcelRow();
            for (int i = 0; i < Head.Length; i++)
            {
                if (Head[i].TypeCell.Equals(""))
                {
                    Head[i].TypeCell = TypeEnum.String;
                }
                ExcelCell cell = new ExcelCell(Head[i].Field, row[Head[i].Field].ToString(), Head[i].TypeCell);
                excelRow.add(cell);
            }
            listRow.Add(excelRow);
        }
    }
    private List<ExcelRow> listRow = new List<ExcelRow>();

    private StringBuilder OutFileContent = new StringBuilder();
    public void add(ExcelRow row) {
        ExcelRow excelRow = new ExcelRow();
        for (int i = 0; i < row.cells.Count(); i++)
        {
            ExcelCell cell = row.cells[i];
            excelRow.add(cell);
        }

        listRow.Add(excelRow);
    }
    public StringBuilder getExcelSheet()
    {
        OutFileContent = AddHeadFile(OutFileContent);
        OutFileContent.Append("<Row ss:AutoFitHeight=\"0\">");
        for (int i = 0; i < Head.Length; i++)
        {
            OutFileContent.Append("<Cell><Data ss:Type=\"String\">" + Head[i].Title + "</Data></Cell>");
        }
        OutFileContent.Append("</Row>");
        for (int i = 0; i < listRow.Count; i++)
        {
            OutFileContent.Append(listRow[i].getRow(Head));
        }
        OutFileContent = AddEndFile(OutFileContent);
        return OutFileContent;
    }
    public ExcelRow[] rows
    {
        get
        {
            ExcelRow[] row = new ExcelRow[listRow.Count];
            for (int i = 0; i < listRow.Count; i++)
            {
                row[i] = listRow[i];
            }
            return row;
        }
    }
    private StringBuilder AddHeadFile(StringBuilder OutFileContent)
    {
        if (Name==null)
        {
            Name = "Sheet";
        }
        OutFileContent.Append(" <Worksheet ss:Name=\"" + Name + "\">\r\n");
        OutFileContent.Append("  <Table ss:ExpandedColumnCount=\"255\" x:FullColumns=\"1\" \r\n");
        OutFileContent.Append("x:FullRows=\"1\" ss:StyleID=\"s62\" ss:DefaultColumnWidth=\"75\" ss:DefaultRowHeight=\"20.25\">\r\n");
        OutFileContent.Append("<Column ss:StyleID=\"s62\" ss:AutoFitWidth=\"0\" ss:Width=\"112.5\"/>\r\n");
        return OutFileContent;
    }
    private StringBuilder AddEndFile(StringBuilder OutFileContent)
    {
        OutFileContent.Append("</Table>\r\n");
        OutFileContent.Append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">\r\n");
        OutFileContent.Append("<Unsynced/>\r\n");
        OutFileContent.Append("<Print>\r\n");
        OutFileContent.Append("    <ValidPrinterInfo/>\r\n");
        OutFileContent.Append("    <PaperSizeIndex>9</PaperSizeIndex>\r\n");
        OutFileContent.Append("    <HorizontalResolution>600</HorizontalResolution>\r\n");
        OutFileContent.Append("    <VerticalResolution>0</VerticalResolution>\r\n");
        OutFileContent.Append("</Print>\r\n");
        OutFileContent.Append("<Selected/>\r\n");
        OutFileContent.Append("<Panes>\r\n");
        OutFileContent.Append("    <Pane>\r\n");
        OutFileContent.Append("    <Number>3</Number>\r\n");
        OutFileContent.Append("    <RangeSelection>R1:R65536</RangeSelection>\r\n");
        OutFileContent.Append("    </Pane>\r\n");
        OutFileContent.Append("</Panes>\r\n");
        OutFileContent.Append("<ProtectObjects>False</ProtectObjects>\r\n");
        OutFileContent.Append("<ProtectScenarios>False</ProtectScenarios>\r\n");
        OutFileContent.Append("</WorksheetOptions>\r\n");
        OutFileContent.Append("</Worksheet>\r\n");
        return OutFileContent;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

    public class IExcelCell
    {
      /// <summary>
      /// 样式的ID
      /// </summary>
        public string StyleID { set; get; }
        /// <summary>
        /// 单元格的格式
        /// </summary>
        public TypeEnum TypeCell { set; get; }
        /// <summary>
        /// 进行判断来输出所对应的内容
        /// </summary>
        public Dictionary<string, string> DisplayContent { set; get; }
    }
    public enum TypeEnum
    {
        String,
        Number
    }

导出Excel是用的类似拼接字符串的方式来实现的,以上代码仅供参考

 

 

 

 

posted @ 2013-03-27 08:21  杜昊东  阅读(1349)  评论(1编辑  收藏  举报