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 值是 Date7/2/3018 的长数字表示。

你的 Cells 对象(它是 Excel.Range 类型)应该有一个 NumberFormat 属性,但是 NumberFormat 没有改变底层 value,它是对 value 的解释,这令人困惑 Excel 并导致它将类似日期的值表示为 Dates .

您始终可以在单元格值前加上撇号,这将强制 Excel 解释为字符串,例如:

theSheet.Cells(rowNumber, 2) = "'" + myName.Descendants(myNameSpaces("ns") + "id").Value