VB.Net:以文本形式写入 Excel 工作簿
VB.Net: Writing To Excel Workbook as Text
我写了下面的函数...
Public Function writeAUTLSheet(doc As XDocument, myNameSpaces As Dictionary(Of String, XNamespace), theSheet As Excel.Worksheet)
'Grab the number of the last row to not overwrite
Dim rowNumber As Integer = getLastRow(theSheet)
For Each myName As XElement In doc.Descendants.Elements(myNameSpaces("ns4") + "autl")
theSheet.Cells(rowNumber, 1) = doc.Descendants.Elements(myNameSpaces("ns") + "number").Value
theSheet.Cells(rowNumber, 2) = myName.Descendants(myNameSpaces("ns") + "id").Value
theSheet.Cells(rowNumber, 3) = myName.Descendants(myNameSpaces("ns") + "name").Value
rowNumber = rowNumber + 1
Next
End Function
按预期运行,但有些值写成"General",有些值写成"Date"。这会导致诸如 07-2-3018 之类的值变成 7/2/3018。然后,如果我将该单元格更改为 "Text" 或 "General"(手动),它就会变成“408525”。
有没有办法指定我要写成文本,实现07-2-3-18被写?
当您放置可能是字符串或日期的数据时,Excel 会用它做一些古怪的事情,正如您所观察到的那样,因为它无法知道您的数据是否我们提供的应该是一种或另一种类型。
通常,任何 可以 被解释为 Date
类型的东西,都会被解释为 Date
类型。因此,1/1/2017
将是一个有效日期,但 13/47/5047
不能,因此 Excel 将后者视为字符串文字,前者视为 Date
类型。如果一个值被认为是 Date
,那么它也是一个 Long
数字。 408525
值是 Date
值 7/2/3018
的长数字表示。
你的 Cells
对象(它是 Excel.Range
类型)应该有一个 NumberFormat
属性,但是 NumberFormat
没有改变底层 value,它是对 value 的解释,这令人困惑 Excel 并导致它将类似日期的值表示为 Dates .
您始终可以在单元格值前加上撇号,这将强制 Excel 解释为字符串,例如:
theSheet.Cells(rowNumber, 2) = "'" + myName.Descendants(myNameSpaces("ns") + "id").Value
我写了下面的函数...
Public Function writeAUTLSheet(doc As XDocument, myNameSpaces As Dictionary(Of String, XNamespace), theSheet As Excel.Worksheet)
'Grab the number of the last row to not overwrite
Dim rowNumber As Integer = getLastRow(theSheet)
For Each myName As XElement In doc.Descendants.Elements(myNameSpaces("ns4") + "autl")
theSheet.Cells(rowNumber, 1) = doc.Descendants.Elements(myNameSpaces("ns") + "number").Value
theSheet.Cells(rowNumber, 2) = myName.Descendants(myNameSpaces("ns") + "id").Value
theSheet.Cells(rowNumber, 3) = myName.Descendants(myNameSpaces("ns") + "name").Value
rowNumber = rowNumber + 1
Next
End Function
按预期运行,但有些值写成"General",有些值写成"Date"。这会导致诸如 07-2-3018 之类的值变成 7/2/3018。然后,如果我将该单元格更改为 "Text" 或 "General"(手动),它就会变成“408525”。
有没有办法指定我要写成文本,实现07-2-3-18被写?
当您放置可能是字符串或日期的数据时,Excel 会用它做一些古怪的事情,正如您所观察到的那样,因为它无法知道您的数据是否我们提供的应该是一种或另一种类型。
通常,任何 可以 被解释为 Date
类型的东西,都会被解释为 Date
类型。因此,1/1/2017
将是一个有效日期,但 13/47/5047
不能,因此 Excel 将后者视为字符串文字,前者视为 Date
类型。如果一个值被认为是 Date
,那么它也是一个 Long
数字。 408525
值是 Date
值 7/2/3018
的长数字表示。
你的 Cells
对象(它是 Excel.Range
类型)应该有一个 NumberFormat
属性,但是 NumberFormat
没有改变底层 value,它是对 value 的解释,这令人困惑 Excel 并导致它将类似日期的值表示为 Dates .
您始终可以在单元格值前加上撇号,这将强制 Excel 解释为字符串,例如:
theSheet.Cells(rowNumber, 2) = "'" + myName.Descendants(myNameSpaces("ns") + "id").Value