Wednesday, September 28, 2011

C# – Create Excel file from DataTable without using Excel Object

DataTable dtCustomer = new DataTable("Customer");
dtCustomer.Columns.Add(new DataColumn("Name"));
dtCustomer.Columns.Add(new DataColumn("Gender"));
DataRow drItem = dtCustomer.NewRow();
drItem["Name"] = "rongchaua";
drItem["Gender"] = "Male";
dtCustomer.Rows.Add(drItem);
drItem = dtCustomer.NewRow();
drItem["Name"] = "4nh7i3m";
drItem["Gender"] = "Male";
dtCustomer.Rows.Add(drItem);
ExcelCreator.Create(dtCustomer,@"E:\Export.xls");
MessageBox.Show("Export done");




class ExcelCreator
{
    public static void Create(DataTable dtSource, string strFileName)
    {
        XmlTextWriter xtwWriter = new XmlTextWriter(strFileName, Encoding.UTF8);
        xtwWriter.Formatting = Formatting.Indented;
        xtwWriter.WriteStartDocument();
        xtwWriter.WriteProcessingInstruction("mso-application", "progid=\"Excel.Sheet\"");
        xtwWriter.WriteStartElement("Workbook", "urn:schemas-microsoft-com:office:spreadsheet");
        xtwWriter.WriteAttributeString("xmlns", "o", null, "urn:schemas-microsoft-com:office:office");
        xtwWriter.WriteAttributeString("xmlns", "x", null, "urn:schemas-microsoft-com:office:excel");
        xtwWriter.WriteAttributeString("xmlns", "ss", null, "urn:schemas-microsoft-com:office:spreadsheet");
        xtwWriter.WriteAttributeString("xmlns", "html", null, "http://www.w3.org/TR/REC-html40");
        xtwWriter.WriteStartElement("DocumentProperties", "urn:schemas-microsoft-com:office:office");
        xtwWriter.WriteElementString("Author", Environment.UserName);
        xtwWriter.WriteElementString("LastAuthor", Environment.UserName);
        xtwWriter.WriteElementString("Created", DateTime.Now.ToString("u") + "Z");
        xtwWriter.WriteElementString("Company", "Unknown");
        xtwWriter.WriteElementString("Version", "11.8122");
        xtwWriter.WriteEndElement();
        xtwWriter.WriteStartElement("ExcelWorkbook", "urn:schemas-microsoft-com:office:excel");
        xtwWriter.WriteElementString("WindowHeight", "13170");
        xtwWriter.WriteElementString("WindowWidth", "17580");
        xtwWriter.WriteElementString("WindowTopX", "120");
        xtwWriter.WriteElementString("WindowTopY", "60");
        xtwWriter.WriteElementString("ProtectStructure", "False");
        xtwWriter.WriteElementString("ProtectWindows", "False");
        xtwWriter.WriteEndElement();
        xtwWriter.WriteStartElement("Styles");
        xtwWriter.WriteStartElement("Style");
        xtwWriter.WriteAttributeString("ss", "ID", null, "Default");
        xtwWriter.WriteAttributeString("ss", "Name", null, "Normal");
        xtwWriter.WriteStartElement("Alignment");
        xtwWriter.WriteAttributeString("ss", "Vertical", null, "Bottom");
        xtwWriter.WriteEndElement();
        xtwWriter.WriteElementString("Borders", null);
        xtwWriter.WriteElementString("Font", null);
        xtwWriter.WriteElementString("Interior", null);
        xtwWriter.WriteElementString("NumberFormat", null);
        xtwWriter.WriteElementString("Protection", null);
        xtwWriter.WriteEndElement();
        xtwWriter.WriteEndElement();
        xtwWriter.WriteStartElement("Worksheet");
        xtwWriter.WriteAttributeString("ss", "Name", null, dtSource.TableName);
        xtwWriter.WriteStartElement("Table");
        xtwWriter.WriteAttributeString("ss", "ExpandedColumnCount", null, dtSource.Columns.Count.ToString());
        xtwWriter.WriteAttributeString("ss", "ExpandedRowCount", null, dtSource.Rows.Count.ToString());
        xtwWriter.WriteAttributeString("x", "FullColumns", null, "1");
        xtwWriter.WriteAttributeString("x", "FullRows", null, "1");
        xtwWriter.WriteAttributeString("ss", "DefaultColumnWidth", null, "60");
        foreach (DataRow row in dtSource.Rows)
        {
            xtwWriter.WriteStartElement("Row");
            foreach (object cellValue in row.ItemArray)
            {
                xtwWriter.WriteStartElement("Cell");
                xtwWriter.WriteStartElement("Data");
                xtwWriter.WriteAttributeString("ss", "Type", null, "String");
                xtwWriter.WriteValue(cellValue);
                xtwWriter.WriteEndElement();
                xtwWriter.WriteEndElement();
            }
            xtwWriter.WriteEndElement();
        }
        xtwWriter.WriteEndElement();
        xtwWriter.WriteStartElement("WorksheetOptions", "urn:schemas-microsoft-com:office:excel");
        xtwWriter.WriteStartElement("PageSetup");
        xtwWriter.WriteStartElement("Header");
        xtwWriter.WriteAttributeString("x", "Margin", null, "0.4921259845");
        xtwWriter.WriteEndElement();
        xtwWriter.WriteStartElement("Footer");
        xtwWriter.WriteAttributeString("x", "Margin", null, "0.4921259845");
        xtwWriter.WriteEndElement();
        xtwWriter.WriteStartElement("PageMargins");
        xtwWriter.WriteAttributeString("x", "Bottom", null, "0.984251969");
        xtwWriter.WriteAttributeString("x", "Left", null, "0.78740157499999996");
        xtwWriter.WriteAttributeString("x", "Right", null, "0.78740157499999996");
        xtwWriter.WriteAttributeString("x", "Top", null, "0.984251969");
        xtwWriter.WriteEndElement();
        xtwWriter.WriteEndElement();
        xtwWriter.WriteElementString("Selected", null);
        xtwWriter.WriteStartElement("Panes");
        xtwWriter.WriteStartElement("Pane");
        xtwWriter.WriteElementString("Number", "1");
        xtwWriter.WriteElementString("ActiveRow", "1");
        xtwWriter.WriteElementString("ActiveCol", "1");
        xtwWriter.WriteEndElement();
        xtwWriter.WriteEndElement();
        xtwWriter.WriteElementString("ProtectObjects", "False");
        xtwWriter.WriteElementString("ProtectScenarios", "False");
        xtwWriter.WriteEndElement();
        xtwWriter.WriteEndElement();
        xtwWriter.WriteEndElement();
        xtwWriter.Flush();
        xtwWriter.Close();
    }
}