我正在使用帶有DOMDocument60分析器的Excel 2010/VBA/XML在Oracle中生成數據報告。我遇到空值問題。 Oracle在xsql查詢中支持null-indicator="yes"
以確保返回的記錄集中包含空字段。如果一個字段有一個值,那麼XML看起來像這樣:<M_NOTCH>8</M_NOTCH>
,如果它爲空,它看起來像這樣:<M_NOTCH NULL="TRUE"/>
。Excel XML導入創建空值爲NULL的額外列
我的代碼調用Web服務,使查詢:
Dim XML_HTTP As New MSXML2.XMLHTTP60: Call XML_HTTP.Open("POST", QUERY_URL, False): Call XML_HTTP.send
,並檢索XML結果:
Dim XML_OUTPUT As DOMDocument60: Set XML_OUTPUT = XML_HTTP.responseXML
它保存文件:
XML_OUTPUT.Save (FILE_PATH)
,然後負載保存文件中的電子表格:
Call DestinationWorksheet.Parent.XmlImport(FILE_PATH, Nothing, True, DestinationWorksheet.Range("A1"))
它使用XML數據填充Excel電子表格。
如果在<M_NOTCH NULL="TRUE"/>
這樣的格式中存在空值,則Excel會認爲這是兩個字段,併爲M_NOTCH(此行沒有數據)創建一列,另一列爲NULL,值爲TRUE。
我已經嘗試過使用xsql設置null-indicator =「no」,這消除了NULL列,但它有一個不同的,不可接受的問題:動態構建的列順序,以便如果第一個XML記錄代表包含空字段的Oracle記錄將從XML中排除,並且只有在包含這些字段的記錄遇到時纔會添加到Excel列表列表中,在這種情況下,它們會添加到列列表的末尾。
我也試着用<M_NOTCH> </M_NOTCH>
代替<M_NOTCH NULL="TRUE"/>
,那很成功。
有誰知道如何讓Oracle使用語法<M_NOTCH> </M_NOTCH>
或讓Excel識別<M_NOTCH NULL="TRUE"/>
而不是創建額外的列?
我傾向於將XSL轉換應用於刪除NULL att的Oracle響應完全排骨。在[這個答案](http://stackoverflow.com/a/3117549/2127508)中的做法將實現這一點 – barrowc