大家帮忙看看从DataGrid中导出到EXCEL为什么出现这样的怪事?谢谢!

lihongyue 2004-08-11 04:37:31
我的DataGird有一个序号字段,是TemplateColumn列(自动排序的),每次导出都不正确,应该从1开始,可以它从7开始的,为702。还有DataGird里有一个合计是在页脚生成的,每次导出只能显示金额,不能显示“合计”二字,希望大家帮忙看看,谢谢了!
代码如下:
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=myExcel.xls");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/ms-excel";

ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw);

ctl.RenderControl(hw);

Response.Write(tw.ToString());
Response.End();
...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihongyue 2004-08-13
  • 打赏
  • 举报
回复
转换后的C#代码:为什么这两句不行呢
xlSheet.ActiveSheet.Cells[1, i + 1].Font.Bold = True;
“object”并不包含对“Font”的定义
xlSheet.get_Range(xlSheet.Cells[1, 1], xlSheet.Cells[1, i + 1]).Font.Bold = True;
属性、索引器或事件“Bold”不受该语言支持;请尝试直接调用访问器方法“OWC.OWCFont.get_Bold()”或“OWC.OWCFont.set_Bold(bool)”
大家快帮帮忙啊

leijin01 2004-08-12
  • 打赏
  • 举报
回复
TO: yungboy(yungboy)

Dim xlsheet As New SpreadsheetClass这句,说SpreadsheetClass没有定义呀
要怎么定义呢?
yungboy 2004-08-12
  • 打赏
  • 举报
回复
Dim oTextbox As New TextBox


Private Sub datagrid1_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles datagrid1.ItemCreated
If (e.Item.ItemType = ListItemType.Footer) Then
e.Item.Cells(19).Text = "累计: "
e.Item.Cells(19).HorizontalAlign = HorizontalAlign.Right
oTextbox.Width = New Unit(100, UnitType.Pixel)
oTextbox.Text = GetTotalPrice()
e.Item.Cells(20).Controls.Add(oTextbox)
End If
yungboy 2004-08-12
  • 打赏
  • 举报
回复
'datagrid导出到excel
Private Sub WriteDataGrid2Excel2()
Dim xlsheet As New SpreadsheetClass
Dim i As Integer = 0
Dim j As Integer = 0

' 输出标题
Dim oItem As DataGridColumn
For Each oItem In datagrid1.Columns
xlsheet.ActiveSheet.Cells(1, i + 1) = oItem.HeaderText

xlsheet.ActiveSheet.Cells(1, i + 1).Font.Bold = True

'设置格式
xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Bold = True
xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Color = "red"
i = i + 1
Next

Dim numbercols As Integer = datagrid1.Items.Item(0).Cells.Count
' 输出字段内容
For j = 0 To datagrid1.Items.Count - 1
For i = 0 To numbercols - 1
xlsheet.Range(xlsheet.Cells(2, 2), xlsheet.Cells(j + 2, i + 1)).Font.Color = "blue"
xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(j + 2, i + 1)).AutoFitColumns()
xlsheet.ActiveSheet.Cells(j + 2, i + 1) = datagrid1.Items.Item(j).Cells(i).Text.Replace(" ", " ")
Next
Next
'页脚文本
For Each oItem In datagrid1.Columns
xlsheet.ActiveSheet.Cells(datagrid1.Items.Count + 2, 20) = "累计"
xlsheet.ActiveSheet.Cells(datagrid1.Items.Count + 2, 21) = oTextbox.Text

Next

Try
'文件输出目录
xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\bak\" + Me.xlfile.Text, OWC.SheetExportActionEnum.ssExportActionNone)
Catch e As System.Runtime.InteropServices.COMException
Response.Write("错误:" + e.Message)
End Try
End Sub
lihongyue 2004-08-12
  • 打赏
  • 举报
回复
大家能否给个C#代码的?谢谢了!
liuyong_lll 2004-08-11
  • 打赏
  • 举报
回复
看来你已经取得数据了,如果你要相应的格式,你必须自己控制生成格式
lihongyue 2004-08-11
  • 打赏
  • 举报
回复
调用是:
if (DataGrid1.Items.Count > 0)
{
DataGrid1.Columns.RemoveAt(0); //Delete a TemplateColumn
ToExcel(DataGrid1);
}

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧