通过excel 2010 vba更新xml并调用命令以在Windows命令行

时间:2015-11-20 20:15:04

标签: xml excel-vba vba excel

我正在尝试自动执行多个分析步骤,并且在中更新文件并调用命令时遇到问题。下面运行并产生所需的输出,直到update bch部分。从那里开始,我不确定更新bch格式的<Image>文件的语法是否正确。我正在尝试更新中的选择字段,然后运行命令。要更新的bch文件中的字段都是<Destination>bch的实例。 有值来更新我从未做过的Private Sub CommandButton3_Click() Dim MyBarCode As String ' Enter Barcode Dim MyScan As String ' Enter ScanDate Dim MyDirectory As String MyBarCode = Application.InputBox("Please enter the barcode", "Bar Code", Type:=2) If MyBarCode = "False" Then Exit Sub 'user canceled Do MyScan = Application.InputBox("Please enter scan date", "Scan Date", Date, Type:=2) If MyScan = "False" Then Exit Sub 'user canceled If IsDate(MyScan) Then Exit Do MsgBox "Please enter a valid date format. ", vbExclamation, "Invalid Date Entry" Loop Range("B20").Value = MyBarCode Range("B21").Value = CDate(MyScan) 'Create nexus directory and folder MyDirectory = "N:\1_DATA\MicroArray\NexusData\" & MyBarCode & "_" & Format(CDate(MyScan), "m-d-yyyy") & "\" If Dir(MyDirectory, vbDirectory) = "" Then MkDir MyDirector 'Write to text file Open MyDirectory & "sample_descriptor.txt" For Output As #1 Print #1, "Experiment Sample" & vbTab & "Control Sample" & vbTab & "Display Name" & vbTab & "Gender" & vbTab & "Control Gender" & vbTab & "Spikein" & vbTab & "SpikeIn Location" & vbTab & "Barcode" Print #1, MyBarCode & "_532Block1.txt" & vbTab & MyBarCode & "_635Block1.txt" & vbTab & ActiveSheet.Range("B8").Value & " " & ActiveSheet.Range("B9").Value & vbTab & ActiveSheet.Range("B10").Value & vbTab & ActiveSheet.Range("B5").Value & vbTab & ActiveSheet.Range("B11").Value & vbTab & ActiveSheet.Range("B12").Value & vbTab & ActiveSheet.Range("B20").Value Print #1, MyBarCode & "_532Block2.txt" & vbTab & MyBarCode & "_635Block2.txt" & vbTab & ActiveSheet.Range("C8").Value & " " & ActiveSheet.Range("C9").Value & vbTab & ActiveSheet.Range("C10").Value & vbTab & ActiveSheet.Range("C5").Value & vbTab & ActiveSheet.Range("C11").Value & vbTab & ActiveSheet.Range("C12").Value & vbTab & ActiveSheet.Range("B20").Value Print #1, MyBarCode & "_532Block3.txt" & vbTab & MyBarCode & "_635Block3.txt" & vbTab & ActiveSheet.Range("D8").Value & " " & ActiveSheet.Range("D9").Value & vbTab & ActiveSheet.Range("D10").Value & vbTab & ActiveSheet.Range("D5").Value & vbTab & ActiveSheet.Range("D11").Value & vbTab & ActiveSheet.Range("D12").Value & vbTab & ActiveSheet.Range("B20").Value Print #1, MyBarCode & "_532Block4.txt" & vbTab & MyBarCode & "_635Block4.txt" & vbTab & ActiveSheet.Range("E8").Value & " " & ActiveSheet.Range("E9").Value & vbTab & ActiveSheet.Range("E10").Value & vbTab & ActiveSheet.Range("E5").Value & vbTab & ActiveSheet.Range("E11").Value & vbTab & ActiveSheet.Range("E12").Value & vbTab & ActiveSheet.Range("B20").Value Close #1 'Open bch Set oXML­File = CreateObject(“Microsoft.XMLDOM”) XML­File­Name = “MyDirectory & MyScan.bch” oXMLFile.Load (MyScan.bch) 'Update bch Set TitleNode = oXMLFile.SelectSingleNode(“ / Batch / Entry / Image”) TitleNode.Text = "I:\ & MyBarCode & "_532" Set TitleNode = oXMLFile.SelectSingleNode(“ / Batch / Entry / Destination”) TitleNode.Text = "MyDirectory & MyBarCode & "_" & Format(CDate(MyScan), "m-d-yyyy") & "\" Set TitleNode = oXMLFile.SelectSingleNode(“ / Batch / /Entry / Entry / Image”) TitleNode.Text = "I:\ & MyBarCode & "_635" Set TitleNode = oXMLFile.SelectSingleNode(“ / Batch / /Entry / Entry / Destination”) TitleNode.Text = “MyDirectory & MyBarCode & "_" & Format(CDate(MyScan), "m-d-yyyy") & "\" If MsgBox("The project file has been created. " & _ "Do you want to run ImaGene?", _ vbQuestion + vbYesNo) = vbYes Then 'Run imaGene java cd "C:\Program Files\BioDiscovery\ImaGene 9.0" ImaGene.exe -batch "MyDirectory & "\" & "_" & MyScan.bch" 文件,并且不认为语法是正确的。我为我想完成的冗长帖子道歉。谢谢你:)。

当前VB

  <?xml version="1.0" encoding="UTF-8"?>

  <Batch>
  <Entry>
  <Image>I:\257168310011_532.tif</Image>
   <Template>C:\Users\cmccabe\Desktop\071683\LC_106Genes_071683_D_20141205.gal</Template>
   <Configuration>C:\Users\cmccabe\Desktop\EmArray\Design\Exon_Array_Parameters.xml      </Configuration>
  <Destination>N:\1_DATA\MicroArray\NexusData\12345_11-19-2015</Destination>
  <Channel>0</Channel>
  <ChannelName></ChannelName>
  <SubstituteGridImage>null</SubstituteGridImage>
  <SubstituteGridChannel>0</SubstituteGridChannel>
  <AdjustGrid>true</AdjustGrid>
  <AdjustSpots>true</AdjustSpots>
  <AlignImages>true</AlignImages>
  <Normalize>false</Normalize>
  <Analyze>false</Analyze>
  </Entry>
  <Entry>
  <Image>I:\257168310011_635.tif</Image>
<Template>C:\Users\cmccabe\Desktop\071683\LC_106Genes_071683_D_20141205.gal</Template>
<Configuration>C:\Users\cmccabe\Desktop\EmArray\Design\Exon_Array_Parameters.xml     </Configuration>
 <Destination>N:\1_DATA\MicroArray\NexusData\12345_11-19-2015</Destination>
 <Channel>0</Channel>
 <ChannelName></ChannelName>
 <SubstituteGridImage>null</SubstituteGridImage>
 <SubstituteGridChannel>0</SubstituteGridChannel>
 <AdjustGrid>true</AdjustGrid>
 <AdjustSpots>true</AdjustSpots>
 <AlignImages>true</AlignImages>
 <Normalize>false</Normalize>
 <Analyze>false</Analyze>
 </Entry>
 </Batch>

更新前的BCH文件格式

target <- c(1,2,3)
A <- c(4,5,6,1,2,3)
B <- c(4,5,6,3,2,1)

my_match(target, A) # TRUE
my_match(target, B) # FALSE

1 个答案:

答案 0 :(得分:2)

考虑使用XPath in VBA提取某个节点的所有项目。然后,使用VBA的Shell()来调用外部Java程序:

' Open bch '
    ' ADD VBA REFERENCE: MICROSOFT XML, v3.0 or v6.0 '
    Dim oXMLFile As New MSXML2.DOMDocument
    Dim imgNode As MSXML2.IXMLDOMNodeList, destNode As MSXML2.IXMLDOMNodeList
    Dim XML­File­Name As String

    XML­File­Name = MyDirectory & "MyScan.bch"
    oXMLFile.Load (XML­File­Name)

    ' EXTRACT NODES INTO LIST AND REWRITE NODES '
    Set imgNode = oXMLFile.DocumentElement.SelectNodes("/Batch/Entry/Image")
    imgNode(0).Text = "I:\" & MyBarCode & "_532"
    imgNode(1).Text = "I:\" & MyBarCode & "_635"

    Set destNode = oXMLFile.DocumentElement.SelectNodes("/Batch/Entry/Destination")
    destNode(0).Text = MyDirectory & MyBarCode & "_" & Format(CDate(MyScan), "m-d-yyyy")
    destNode(1).Text = MyDirectory & MyBarCode & "_" & Format(CDate(MyScan), "m-d-yyyy")

    ' SAVE UPDATED XML '
    oXMLFile.Save XML­File­Name

    ' CALL JAVA PROGRAM USING SHELL '
    Shell """C:\Program Files\BioDiscovery\ImaGene 9.0\ImaGene.exe"" batch " _
              & XML­File­Name, vbNormalFocus

    ' UNINTIALIZE OBJECTS '    
    Set imgNode = Nothing
    Set destNode = Nothing        
    Set oXMLFile = Nothing