关于从GridView里如何导出数据的问题? 请问如何从GridView里面把数据导出到OpenOffice下的.ods格式文件里面?我现在只知道怎么导出到Excel里面,但是客户用的是OpenOffice,所以需要导出到.ods里面。如果直接导出.xls文件,打开了是一些乱码。不知道这个问题怎么解决,请教CSDN牛人? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class ExportExcel { public static void PrepareGridViewForExport(Control gv) { LinkButton lb = new LinkButton(); Literal l = new Literal(); string name = String.Empty; for (int i = 0; i < gv.Controls.Count; i++) { if (gv.Controls[i].GetType() == typeof(LinkButton)) { l.Text = (gv.Controls[i] as LinkButton).Text; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } else if (gv.Controls[i].GetType() == typeof(DropDownList)) { l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } else if (gv.Controls[i].GetType() == typeof(CheckBox)) { l.Text = (gv.Controls[i] as CheckBox).Checked ? "True" : "False"; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } if (gv.Controls[i].HasControls()) { PrepareGridViewForExport(gv.Controls[i]); } } } public static void ExportGridView(GridView GridView1, string filename) { string attachment = "attachment; filename=" + filename + ".xls"; HttpResponse Response = HttpContext.Current.Response; Response.ClearContent(); Response.Charset = "utf-8"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.AddHeader("content-disposition", attachment); Response.ContentType = "application/ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); // Create a form to contain the grid HtmlForm frm = new HtmlForm(); GridView1.Parent.Controls.Add(frm); frm.Attributes["runat"] = "server"; frm.Controls.Add(GridView1); frm.RenderControl(htw); //GridView1.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); } } protected void Button1_Click(object sender, EventArgs e) { BindAllTeaInfo(); this.GridView1.AllowPaging = false; this.GridView1.DataBind(); //上面的是当你有分页时就可以加上去,BindGridView函数里又变回去, ExportExcel.PrepareGridViewForExport(GridView1); ExportExcel.ExportGridView(GridView1, "周奖"); }这个是解决乱码的问题 网上找个,只要把数据转换成datatable,我用过,导出到excel,word都行! string _xmlStr = @"<?xml version='1.0'?> <?mso-application progid='Excel.Sheet'?> <Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet' xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'> <DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'> <Author>aa</Author> <LastAuthor>aa</LastAuthor> <Created>2007-12-07T06:54:38Z</Created> <Company>WZKJ</Company> <Version>11.5606</Version> </DocumentProperties> <ExcelWorkbook xmlns='urn:schemas-microsoft-com:office:excel'> <WindowHeight>5970</WindowHeight> <WindowWidth>7395</WindowWidth> <WindowTopX>480</WindowTopX> <WindowTopY>60</WindowTopY> <ProtectStructure>False</ProtectStructure> <ProtectWindows>False</ProtectWindows> </ExcelWorkbook> <Styles> <Style ss:ID='Default' ss:Name='Normal'> <Alignment ss:Vertical='Center'/> <Borders/> <Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/> <Interior/> <NumberFormat/> <Protection/> </Style> <Style ss:ID='s21'> <Alignment ss:Vertical='Center' ss:WrapText='1'/> </Style> </Styles> <Worksheet ss:Name='Sheet1'> $Table$ <WorksheetOptions xmlns='urn:schemas-microsoft-com:office:excel'> <Selected/> <Panes> <Pane> <Number>3</Number> <ActiveRow>2</ActiveRow> <ActiveCol>3</ActiveCol> </Pane> </Panes> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet> </Workbook>"; string sqlStr = String.Format("select * from table where ID in({0})",IDStr); int recordCount = 0;//记录数 string outputStr = "";//保存要输出的数据部分 using (SqlDataReader dr = conn.GetDataReader(sqlStr)) { StringBuilder sb = new StringBuilder(); sb.Append("<Column ss:Index='1' ss:AutoFitWidth='0' ss:Width='33.75'/>"); sb.Append("<Column ss:Index='2' ss:AutoFitWidth='0' ss:Width='93.75'/>"); sb.Append("<Column ss:Index='3' ss:AutoFitWidth='0' ss:Width='153.75'/>"); sb.Append("<Column ss:Index='4' ss:AutoFitWidth='0' ss:Width='273.75'/>"); sb.Append("<Column ss:Index='5' ss:AutoFitWidth='0' ss:Width='63.75'/>"); sb.Append("<Column ss:Index='6' ss:AutoFitWidth='0' ss:Width='93.75'/>"); sb.Append("<Column ss:Index='7' ss:AutoFitWidth='0' ss:Width='93.75'/>"); sb.Append("<Column ss:Index='8' ss:AutoFitWidth='0' ss:Width='63.75'/>"); sb.Append("<Column ss:Index='9' ss:AutoFitWidth='0' ss:Width='153.75'/>"); sb.Append("<Column ss:Index='10' ss:AutoFitWidth='0' ss:Width='153.75'/>"); sb.Append("<Column ss:Index='11' ss:AutoFitWidth='0' ss:Width='153.75'/>"); sb.Append("<Row>"); sb.Append("<Cell><Data ss:Type='String'>序号</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名导</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>"); sb.Append("</Row>"); while (dr.Read()) { recordCount = recordCount + 1; sb.Append("<Row ss:StyleID='s21'>"); sb.Append("<Cell><Data ss:Type='String'>" + recordCount.ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>"); sb.Append("</Row>"); } outputStr = sb.ToString(); } string topString = "<Table ss:ExpandedColumnCount='11' ss:ExpandedRowCount='" + Convert.ToString(recordCount + 1) + "' x:FullColumns='1' x:FullRows='1' ss:DefaultColumnWidth='54'>"; string bottomStr = "</Table>"; string ExcelXmlStr = _xmlStr.Replace("$Table$", topString + outputStr + bottomStr); Response.Clear(); Response.Buffer = true; Response.AddHeader("Content-Disposition", "attachment;filename=Work_Report.xls"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8"); Response.ContentType = "application/ms-excel"; Response.Output.Write(ExcelXmlStr); Response.Flush(); Response.End();看看这个吧,对你应该有帮助的,用Excel2007和Excel2003打开都没问题,主要是要对Excel的XML熟悉一下就可以了 谢谢你的费心,但是我需要的是放到OpenOffice下的.ods格式文件里能正常打开。我现在的功能放到Excel里面是可以正常打开的。就是不知道.ods怎么弄,再一次谢谢你。 请问有方法觉得这问题了吗?现在我面对了这个问题...求助... >.< 我的问题是必须导出.xls然后支援ms excel和openoffice calc问题是在openoffice里它只显示html并不是table form 跪求答案很紧急的问题拜托了各位大大>.< 做个小程序,让WEB打开不提示对话框怎么做? 关于空间跟域名 DataGridView 底部添加合计行后,怎样才能使垂直滚动条滚动到最后时,最后一行不被合计行遮挡? c#对IIS日志文件复制并读取的错误。。。 C#连接Oracle存图片的问题,急了 编写完第一个模块, 觉得把它放在全局命名空间不合适,现在想换个命名空间,怎么换? 如何把HTML代码在textbox中解析成网页上显示的格式,就象在线编辑器一样 .net 客户端控件和服务器控件用法区别 在问一个问题 小问题!巨郁闷!!! 一个比较笨的问题。关于Console.Write winform keydown事件和xp快捷键冲突
{ public static void PrepareGridViewForExport(Control gv)
{ LinkButton lb = new LinkButton(); Literal l = new Literal(); string name = String.Empty; for (int i = 0; i < gv.Controls.Count; i++)
{ if (gv.Controls[i].GetType() == typeof(LinkButton))
{ l.Text = (gv.Controls[i] as LinkButton).Text; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } else if (gv.Controls[i].GetType() == typeof(DropDownList))
{ l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } else if (gv.Controls[i].GetType() == typeof(CheckBox))
{ l.Text = (gv.Controls[i] as CheckBox).Checked ? "True" : "False"; gv.Controls.Remove(gv.Controls[i]); gv.Controls.AddAt(i, l); } if (gv.Controls[i].HasControls())
{ PrepareGridViewForExport(gv.Controls[i]); } }
} public static void ExportGridView(GridView GridView1, string filename)
{ string attachment = "attachment; filename=" + filename + ".xls"; HttpResponse Response = HttpContext.Current.Response; Response.ClearContent();
Response.Charset = "utf-8";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AddHeader("content-disposition", attachment); Response.ContentType = "application/ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw);
// Create a form to contain the grid HtmlForm frm = new HtmlForm(); GridView1.Parent.Controls.Add(frm); frm.Attributes["runat"] = "server"; frm.Controls.Add(GridView1);
frm.RenderControl(htw); //GridView1.RenderControl(htw); Response.Write(sw.ToString()); Response.End();
}
} protected void Button1_Click(object sender, EventArgs e)
{
BindAllTeaInfo();
this.GridView1.AllowPaging = false;
this.GridView1.DataBind();
//上面的是当你有分页时就可以加上去,BindGridView函数里又变回去,
ExportExcel.PrepareGridViewForExport(GridView1);
ExportExcel.ExportGridView(GridView1, "周奖"); }
这个是解决乱码的问题
<?mso-application progid='Excel.Sheet'?>
<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'
xmlns:o='urn:schemas-microsoft-com:office:office'
xmlns:x='urn:schemas-microsoft-com:office:excel'
xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet'
xmlns:html='http://www.w3.org/TR/REC-html40'>
<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>
<Author>aa</Author>
<LastAuthor>aa</LastAuthor>
<Created>2007-12-07T06:54:38Z</Created>
<Company>WZKJ</Company>
<Version>11.5606</Version>
</DocumentProperties>
<ExcelWorkbook xmlns='urn:schemas-microsoft-com:office:excel'>
<WindowHeight>5970</WindowHeight>
<WindowWidth>7395</WindowWidth>
<WindowTopX>480</WindowTopX>
<WindowTopY>60</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID='Default' ss:Name='Normal'>
<Alignment ss:Vertical='Center'/>
<Borders/>
<Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID='s21'>
<Alignment ss:Vertical='Center' ss:WrapText='1'/>
</Style>
</Styles>
<Worksheet ss:Name='Sheet1'>
$Table$
<WorksheetOptions xmlns='urn:schemas-microsoft-com:office:excel'>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>2</ActiveRow>
<ActiveCol>3</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>";
string sqlStr = String.Format("select * from table where ID in({0})",IDStr); int recordCount = 0;//记录数
string outputStr = "";//保存要输出的数据部分
using (SqlDataReader dr = conn.GetDataReader(sqlStr))
{
StringBuilder sb = new StringBuilder();
sb.Append("<Column ss:Index='1' ss:AutoFitWidth='0' ss:Width='33.75'/>");
sb.Append("<Column ss:Index='2' ss:AutoFitWidth='0' ss:Width='93.75'/>");
sb.Append("<Column ss:Index='3' ss:AutoFitWidth='0' ss:Width='153.75'/>");
sb.Append("<Column ss:Index='4' ss:AutoFitWidth='0' ss:Width='273.75'/>");
sb.Append("<Column ss:Index='5' ss:AutoFitWidth='0' ss:Width='63.75'/>");
sb.Append("<Column ss:Index='6' ss:AutoFitWidth='0' ss:Width='93.75'/>");
sb.Append("<Column ss:Index='7' ss:AutoFitWidth='0' ss:Width='93.75'/>");
sb.Append("<Column ss:Index='8' ss:AutoFitWidth='0' ss:Width='63.75'/>");
sb.Append("<Column ss:Index='9' ss:AutoFitWidth='0' ss:Width='153.75'/>");
sb.Append("<Column ss:Index='10' ss:AutoFitWidth='0' ss:Width='153.75'/>");
sb.Append("<Column ss:Index='11' ss:AutoFitWidth='0' ss:Width='153.75'/>");
sb.Append("<Row>");
sb.Append("<Cell><Data ss:Type='String'>序号</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名导</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>列名</Data></Cell>");
sb.Append("</Row>");
while (dr.Read())
{
recordCount = recordCount + 1;
sb.Append("<Row ss:StyleID='s21'>");
sb.Append("<Cell><Data ss:Type='String'>" + recordCount.ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("<Cell><Data ss:Type='String'>" + dr["字段"].ToString() + "</Data></Cell>");
sb.Append("</Row>");
}
outputStr = sb.ToString();
} string topString = "<Table ss:ExpandedColumnCount='11' ss:ExpandedRowCount='" + Convert.ToString(recordCount + 1) + "' x:FullColumns='1' x:FullRows='1' ss:DefaultColumnWidth='54'>";
string bottomStr = "</Table>";
string ExcelXmlStr = _xmlStr.Replace("$Table$", topString + outputStr + bottomStr); Response.Clear();
Response.Buffer = true;
Response.AddHeader("Content-Disposition", "attachment;filename=Work_Report.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.ContentType = "application/ms-excel";
Response.Output.Write(ExcelXmlStr);
Response.Flush();
Response.End();看看这个吧,对你应该有帮助的,用Excel2007和Excel2003打开都没问题,主要是要对Excel的XML熟悉一下就可以了
谢谢你的费心,但是我需要的是放到OpenOffice下的.ods格式文件里能正常打开。我现在的功能放到Excel里面是可以正常打开的。就是不知道.ods怎么弄,再一次谢谢你。
现在我面对了这个问题...
求助... >.<
我的问题是
必须导出.xls然后支援ms excel和openoffice calc
问题是在openoffice里它只显示html
并不是table form
很紧急的问题
拜托了各位大大
>.<