excel - 使用 vb.net 中的 XML 从 datagridview 导出到 excel
问题描述
我正在尝试使用 XML 将数据从 datagridview 导出到 excel 文件。下面是我写的代码
Dim fs As New IO.StreamWriter(FileName, False)
With fs
.WriteLine("<?xml version=""1.0""?>")
.WriteLine("<?mso-application progid=""Excel.Sheet""?>")
.WriteLine("<ss:Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet"">")
.WriteLine(" <ss:Styles>")
.WriteLine(" <ss:Style ss:ID=""1"">")
.WriteLine(" <ss:Font ss:Bold=""1""/>")
.WriteLine(" <ss:/Style>")
.WriteLine(" <ss:Worksheet ss:Name=""WCRPaymentLog"">")
.WriteLine(" <ss:Table>")
For x As Integer = 0 To dgReport.Columns.Count - 1
.WriteLine(" <ss:Column ss:Width=""{0}""/>", dgReport.Columns.Item(x).Width)
Next
.WriteLine(" <ss:Row ss:StyleID=""1"">")
For x As Integer = 0 To dgReport.Columns.Count - 1
.WriteLine(" <ss:Cell>")
.WriteLine(String.Format(" <ss:Data ss:Type=""String"">{0}</ss:Data>", dgReport.Columns.Item(x).HeaderText.Trim))
.WriteLine(" </ss:Cell>")
Next
.WriteLine(" </ss:Row>")
For intRow As Integer = 0 To dgReport.RowCount - 2
.WriteLine(String.Format(" <ss:Row ss:Height=""{0}"">", dgReport.Rows(intRow).Height))
For intCol As Integer = 0 To dgReport.Columns.Count - 1
.WriteLine(" <ss:Cell>")
.WriteLine(String.Format(" <ss:Data ss:Type=""String"">{0}</ss:Data>", dgReport.Item(intCol, intRow).Value.ToString.Trim))
.WriteLine(" </ss:Cell>")
Next
.WriteLine(" </ss:Row>")
Next
.WriteLine(" </ss:Table>")
.WriteLine(" </ss:Worksheet>")
.WriteLine("</ss:Workbook>")
.Close()
End With
当我尝试运行此代码时,它可以正确执行,但是在打开生成的文件时,它会给出错误:Strict Parse Error。
错误日志生成如下: XML PARSE ERROR: Undefined namespace Error occurred at or below this element stack: (Stack is empty --error发生在顶级元素或以下。)
任何人都可以在我犯错的地方帮助我。
如果文件存在,我也想这样编码,然后它将在代码中添加一个新工作表并在该工作表中写入表格。任何人都可以帮助我知道该怎么做,因为此代码会覆盖现有文件。
解决方案
您似乎正在尝试创建 Excel 2003 SpreadsheetML 文件。
您表示在 Excel 中打开文件时收到此错误
XML 解析错误:未定义的命名空间错误发生在此元素堆栈处或以下:(堆栈为空 - 错误发生在顶级元素处或以下。)
这使我想到了这一行:
.WriteLine("<ss:Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet"">")
这里您使用命名空间别名“ss:”,但它没有定义。此外,该标签应如下所示。
<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">
有关更多信息,请参阅:
OfficeTalk:深入了解 SpreadsheetML(第 1 部分,共 2 部分)
OfficeTalk:深入了解 SpreadsheetML(第 2 部分,共 2 部分)
编辑:
您可能还会发现使用 VB 的 Xml Literals 是一种更简单的构建文件的方法。教程视频[我如何:] 使用 LINQ to XML 创建 Excel 电子表格?可能有利于复习。
推荐阅读
- microsoft-graph-api - 如何使用 Microsoft Graph API C# SDK 将文件上传到 SharePoint 库文件夹?
- javascript - Angular如何调用异步函数并在结果返回后继续
- laravel - 如何使用 vue.js 在本地存储中接收部分 JWT Token?
- mongodb - mongoDB 使用 updateMany 和数组
- rxjs - 如何在 RxJS 中等待一致的状态?
- android - Android 12 API 31 启动画面 NullPointerException:尝试调用虚拟方法'boolean android.graphics.drawable.Drawable.isProjected()
- reactjs - 使用 http-proxy-middleware 模块反应手动代理不起作用
- reactjs - 如何使用带参数的深拷贝
- barcode - AndroidX中'info.androidhive.barcode.BarcodeReader'的等价物是什么
- python - Django 自定义用户模型 createsuperuser 错误