獲取Excel的單元格數據類型(靠譜)


VBA中,單元格屬性有NumberFormat可以獲取單元格格式,比如:

  • G/通式格式→常規
  • @→文本
  • yyyy/m/d→日期

問題:

  1. G/通式格式,無法知道值是整數還是浮點數,
  2. yyyy/m/d如果換一種日期格式就對不上了。

所以cell.Value(12)就派上用場了,是XML格式的單元格更詳細的信息。

<xml xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
 xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
 xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
 <x:PivotCache>
  <x:CacheIndex>1</x:CacheIndex>
  <s:Schema id="RowsetSchema">
   <s:ElementType name="row" content="eltOnly">
    <s:attribute type="Col1"/>
    <s:extends type="rs:rowbase"/>
   </s:ElementType>
   <s:AttributeType name="Col1" rs:name="字段1">
    <s:datatype dt:type="dateTime"/>
   </s:AttributeType>
  </s:Schema>
  <rs:data>
   <z:row Col1="2019-04-07T00:00:00"/>
  </rs:data>
 </x:PivotCache>
</xml>

dateTime就是相應的數據類型所在位置,獲取方法(AutoHotkey)

;返回為字符串,int|float|255|dateTime|boolean
;255表示字符串,boolean表示空單元格,其他還沒遇到,待完善
valueType(cell) { xml := cell.Value(12) oXML := ComObjCreate("MSXML2.DOMDocument.6.0") oXML.loadXML(xml) ;oNS := ComObjCreate("***") ;oNS.AddNamespace("x", "urn:schemas-microsoft-com:office:excel") ;oXML.SelectSingleNode("xml/x:PivotCache", oNS)
  ;不懂XML,也沒搞定SelectSingleNode的命名空間,以下的方法比較Low,希望有人指點。(純處理字符串,oDatetype其實也沒什么必要) oDatatype :
= oXML.childNodes[0].childNodes[0].childNodes[1].childNodes[1].childNodes[0] strType := oDatatype.xml ;除了xml不知道還有什么屬性更好用 Return RegExReplace(SubStr(strType,1,StrLen(strType)-3), '.*"') }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM