<asp:TextBox ID="txtname" runat="server"></asp:TextBox>
<asp:Button ID="Export" runat="server" Text="Export" OnClick="Export_Click" />
public void DataSetToExcelSheet(DataSet source, string fileName)
public void DataSetToExcelSheet(DataSet source, string fileName)
{
string strPath = Server.MapPath("ExcelFile"); //folder get pathSystem.IO.StreamWriter excelDoc = new System.IO.StreamWriter(strPath+"/" + fileName);
const string startExcelXML = "<xml version>rn<Workbook "
+"xmlns="urn:schemas-microsoft-com:office:spreadsheet"rn"
+ " xmlns:o="urn:schemas-microsoft-com:office:office"rn "
+ "xmlns:x="urn:schemas- microsoft-com:office:"
+ "excel"rn xmlns:ss="urn:schemas-microsoft-com:"
+ "office:spreadsheet">rn <Styles>rn "
+ "<Style ss:ID="Default" ss:Name="Normal">rn "
+ "<Alignment ss:Vertical="Bottom"/>rn <Borders/>"
+ "rn <Font/>rn <Interior/>rn <NumberFormat/>"
+ "rn <Protection/>rn </Style>rn "
+ "<Style ss:ID="BoldColumn">rn <Font "
+ "x:Family="Swiss" ss:Bold="1"/>rn </Style>rn "
+ "<Style ss:ID="StringLiteral">rn <NumberFormat"
+ " ss:Format="@"/>rn </Style>rn <Style "
+ "ss:ID="Decimal">rn <NumberFormat "
+ "ss:Format="0.0000"/>rn </Style>rn "
+ "<Style ss:ID="Integer">rn <NumberFormat "
+ "ss:Format="0"/>rn </Style>rn <Style "
+ "ss:ID="DateLiteral">rn <NumberFormat "
+ "ss:Format="mm/dd/yyyy;@"/>rn </Style>rn "
+ "</Styles>rn ";
const string endExcelXML = "</Workbook>";
int rowCount = 0;
int sheetCount = 1; //Sheet
excelDoc.Write(startExcelXML);
excelDoc.Write("<Worksheet ss:Name="sheet" + sheetCount + "">");
excelDoc.Write("<Table>");
excelDoc.Write("<Row>");
for (int x = 0; x < source.Tables[0].Columns.Count; x++)
{
excelDoc.Write("<Cell ss:StyleID="BoldColumn"><Data ss:Type="String">");
excelDoc.Write(source.Tables[0].Columns[x].ColumnName);
excelDoc.Write("</Data></Cell>"); }
excelDoc.Write("</Row>");
foreach (DataRow x in source.Tables[0].Rows)
{
rowCount++; //if the number of rows is > 64000 create a new page to continue output
if (rowCount == 64000)
{
rowCount = 0;
sheetCount++;
excelDoc.Write("</Table>");
excelDoc.Write(" </Worksheet>");
excelDoc.Write("<Worksheet ss:Name="Sheet" + sheetCount + "">");
excelDoc.Write("<Table>"); }
excelDoc.Write("<Row>"); //ID=" + rowCount + "
for (int y = 0; y < source.Tables[0].Columns.Count; y++)
{ System.Type rowType;
rowType = x[y].GetType();
switch (rowType.ToString())
{
case "System.String":
string XMLstring = x[y].ToString();
XMLstring = XMLstring.Trim();
XMLstring = XMLstring.Replace("&", "&");
XMLstring = XMLstring.Replace(">", ">");
XMLstring = XMLstring.Replace("<", "<");
excelDoc.Write("<Cell ss:StyleID="StringLiteral">" + "<Data ss:Type="String">");
excelDoc.Write(XMLstring);
excelDoc.Write("</Data></Cell>");
break;
case "System.DateTime":
//Excel has a specific Date Format of YYYY-MM-DD followed by
//the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000
//The Following Code puts the date stored in XMLDate
//to the format above
DateTime XMLDate = (DateTime)x[y];
string XMLDatetoString = ""; //Excel Converted Date
XMLDatetoString = XMLDate.Year.ToString()
+ "-"
+ (XMLDate.Month < 10 ? "0"
+ XMLDate.Month.ToString() :
XMLDate.Month.ToString())
+ "-"
+
(XMLDate.Day < 10 ? "0"
+
XMLDate.Day.ToString() :
XMLDate.Day.ToString())
+ "T"
+
(XMLDate.Hour < 10 ? "0" +
XMLDate.Hour.ToString() :
XMLDate.Hour.ToString())
+ ":"
+
(XMLDate.Minute < 10 ? "0" +
XMLDate.Minute.ToString() :
XMLDate.Minute.ToString())
+ ":"
+
(XMLDate.Second < 10 ? "0" +
XMLDate.Second.ToString() : XMLDate.Second.ToString())
+ ".000";
excelDoc.Write("<Cell ss:StyleID="DateLiteral">"
+
"<Data ss:Type="DateTime">");
excelDoc.Write(XMLDatetoString);
excelDoc.Write("</Data></Cell>");
break;
case "System.Boolean":
excelDoc.Write("<Cell ss:StyleID="StringLiteral">"
+
"<Data ss:Type="String">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.Int16":
case "System.Int32":
case "System.Int64":
case "System.Byte":
excelDoc.Write("<Cell ss:StyleID="Integer">" +
"<Data ss:Type="Number">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.Decimal":
case "System.Double":
excelDoc.Write("<Cell ss:StyleID="Decimal">"
+
"<Data ss:Type="Number">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.DBNull":
excelDoc.Write("<Cell ss:StyleID="StringLiteral">"
+
"<Data ss:Type="String">");
excelDoc.Write("");
excelDoc.Write("</Data></Cell>");
break;
default:
throw (new Exception(rowType.ToString() + " not handled."));
}
}
excelDoc.Write("</Row>");
}
excelDoc.Write("</Table>");
excelDoc.Write(" </Worksheet>");
excelDoc.Write(endExcelXML);
excelDoc.Close();
}
protected void Export_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ConnectionString);
SqlDataAdapter sda = new SqlDataAdapter("select top 100000 regid,companyname from registration order by regid", con);
DataSet ds = new DataSet();
sda.Fill(ds);
DataSetToExcelSheet(ds, txtname.Text+".xls");
}
const string startExcelXML = "<xml version>rn<Workbook "
+"xmlns="urn:schemas-microsoft-com:office:spreadsheet"rn"
+ " xmlns:o="urn:schemas-microsoft-com:office:office"rn "
+ "xmlns:x="urn:schemas- microsoft-com:office:"
+ "excel"rn xmlns:ss="urn:schemas-microsoft-com:"
+ "office:spreadsheet">rn <Styles>rn "
+ "<Style ss:ID="Default" ss:Name="Normal">rn "
+ "<Alignment ss:Vertical="Bottom"/>rn <Borders/>"
+ "rn <Font/>rn <Interior/>rn <NumberFormat/>"
+ "rn <Protection/>rn </Style>rn "
+ "<Style ss:ID="BoldColumn">rn <Font "
+ "x:Family="Swiss" ss:Bold="1"/>rn </Style>rn "
+ "<Style ss:ID="StringLiteral">rn <NumberFormat"
+ " ss:Format="@"/>rn </Style>rn <Style "
+ "ss:ID="Decimal">rn <NumberFormat "
+ "ss:Format="0.0000"/>rn </Style>rn "
+ "<Style ss:ID="Integer">rn <NumberFormat "
+ "ss:Format="0"/>rn </Style>rn <Style "
+ "ss:ID="DateLiteral">rn <NumberFormat "
+ "ss:Format="mm/dd/yyyy;@"/>rn </Style>rn "
+ "</Styles>rn ";
const string endExcelXML = "</Workbook>";
int rowCount = 0;
int sheetCount = 1; //Sheet
excelDoc.Write(startExcelXML);
excelDoc.Write("<Worksheet ss:Name="sheet" + sheetCount + "">");
excelDoc.Write("<Table>");
excelDoc.Write("<Row>");
for (int x = 0; x < source.Tables[0].Columns.Count; x++)
{
excelDoc.Write("<Cell ss:StyleID="BoldColumn"><Data ss:Type="String">");
excelDoc.Write(source.Tables[0].Columns[x].ColumnName);
excelDoc.Write("</Data></Cell>"); }
excelDoc.Write("</Row>");
foreach (DataRow x in source.Tables[0].Rows)
{
rowCount++; //if the number of rows is > 64000 create a new page to continue output
if (rowCount == 64000)
{
rowCount = 0;
sheetCount++;
excelDoc.Write("</Table>");
excelDoc.Write(" </Worksheet>");
excelDoc.Write("<Worksheet ss:Name="Sheet" + sheetCount + "">");
excelDoc.Write("<Table>"); }
excelDoc.Write("<Row>"); //ID=" + rowCount + "
for (int y = 0; y < source.Tables[0].Columns.Count; y++)
{ System.Type rowType;
rowType = x[y].GetType();
switch (rowType.ToString())
{
case "System.String":
string XMLstring = x[y].ToString();
XMLstring = XMLstring.Trim();
XMLstring = XMLstring.Replace("&", "&");
XMLstring = XMLstring.Replace(">", ">");
XMLstring = XMLstring.Replace("<", "<");
excelDoc.Write("<Cell ss:StyleID="StringLiteral">" + "<Data ss:Type="String">");
excelDoc.Write(XMLstring);
excelDoc.Write("</Data></Cell>");
break;
case "System.DateTime":
//Excel has a specific Date Format of YYYY-MM-DD followed by
//the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000
//The Following Code puts the date stored in XMLDate
//to the format above
DateTime XMLDate = (DateTime)x[y];
string XMLDatetoString = ""; //Excel Converted Date
XMLDatetoString = XMLDate.Year.ToString()
+ "-"
+ (XMLDate.Month < 10 ? "0"
+ XMLDate.Month.ToString() :
XMLDate.Month.ToString())
+ "-"
+
(XMLDate.Day < 10 ? "0"
+
XMLDate.Day.ToString() :
XMLDate.Day.ToString())
+ "T"
+
(XMLDate.Hour < 10 ? "0" +
XMLDate.Hour.ToString() :
XMLDate.Hour.ToString())
+ ":"
+
(XMLDate.Minute < 10 ? "0" +
XMLDate.Minute.ToString() :
XMLDate.Minute.ToString())
+ ":"
+
(XMLDate.Second < 10 ? "0" +
XMLDate.Second.ToString() : XMLDate.Second.ToString())
+ ".000";
excelDoc.Write("<Cell ss:StyleID="DateLiteral">"
+
"<Data ss:Type="DateTime">");
excelDoc.Write(XMLDatetoString);
excelDoc.Write("</Data></Cell>");
break;
case "System.Boolean":
excelDoc.Write("<Cell ss:StyleID="StringLiteral">"
+
"<Data ss:Type="String">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.Int16":
case "System.Int32":
case "System.Int64":
case "System.Byte":
excelDoc.Write("<Cell ss:StyleID="Integer">" +
"<Data ss:Type="Number">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.Decimal":
case "System.Double":
excelDoc.Write("<Cell ss:StyleID="Decimal">"
+
"<Data ss:Type="Number">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.DBNull":
excelDoc.Write("<Cell ss:StyleID="StringLiteral">"
+
"<Data ss:Type="String">");
excelDoc.Write("");
excelDoc.Write("</Data></Cell>");
break;
default:
throw (new Exception(rowType.ToString() + " not handled."));
}
}
excelDoc.Write("</Row>");
}
excelDoc.Write("</Table>");
excelDoc.Write(" </Worksheet>");
excelDoc.Write(endExcelXML);
excelDoc.Close();
}
protected void Export_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ConnectionString);
SqlDataAdapter sda = new SqlDataAdapter("select top 100000 regid,companyname from registration order by regid", con);
DataSet ds = new DataSet();
sda.Fill(ds);
DataSetToExcelSheet(ds, txtname.Text+".xls");
}
its great but how to export image with data in excel sheet
ReplyDeleteGreat Article
ReplyDelete