一个变量VBScript中的多个文本文件

时间:2018-07-31 07:33:53

标签: vbscript output createfile

我有一些VBScript代码,用于从属性收集数据并将其写入文件。

它可以完全正常工作,但每次输出仅应包含一行。 对于10个对象,一行包含10个文件。 但是有些对象会有所不同,这就是为什么输出文件包含两行或更多行的原因。

您能帮我提出您的想法吗?

包含数据的变量称为lGesamt

For Each lnkOberstoff In MwScriptObj.Links(fldOberstoff)
    lGesamt = ""
    Set objOberstoff = lnkOberstoff.object
    liefName = objOberstoff.Property(1482).Value(0)
    liefArtikel = objOberstoff.Property(1801).Value(0)
    saison = objOberstoff.Property(1527).Value(0)

    For Each varcolor In objOberstoff.Variations(propDefFb)
    'VarNo = MwScriptObj.VarNoFromVarId(varcolor.value)
        Farben = ""                
        Farben = varcolor.Value
        Dim Lieferant
        Lieferant = objOberstoff.Value(prpLieferant, Nothing, varcolor)
        Dim LieferantenArtikel
        LieferantenArtikel = objOberstoff.Value(prpLieferantenArtikel, Nothing, varcolor)
        Dim Saison
        Saison = objOberstoff.Value(prpSaison, Nothing, varcolor)
        Dim Thema
        For each lnkGtThema in objOberstoff.Links(fldGtThema)
            Set objGtThema = lnkGtThema.object
            Thema = objGtThema.Property(2577).Value(0)
        Next
        Dim LieferantenDessin
        LieferantenDessin = objOberstoff.Value(prpLieferantenDessin, Nothing, varcolor)
        Dim Dessin
        Dessin = objOberstoff.Value(prpDessin, Nothing, varcolor)
        Dim LieferantenFarbe
        LieferantenFarbe = objOberstoff.Value(prpLieferantenFarbe, Nothing, varcolor)
        Dim MengeGeliefert
        MengeGeliefert = objOberstoff.Value(prpMengeGeliefert, Nothing, varcolor)
        Dim SmsNutzbreite
        SmsNutzbreite = objOberstoff.Value(prpSmsNutzbreite, Nothing, varcolor)
        Dim GewichtsEinheit
        GewichtsEinheit = objOberstoff.Value(prpGewichtsEinheit, Nothing, varcolor)
        Dim GewichtBrutto
        GewichtBrutto = objOberstoff.Value(prpGewichtBrutto, Nothing, varcolor)
        Dim Materialzusammensetzung
        Materialzusammensetzung = objOberstoff.Value(prpMaterialzusammensetzung, Nothing, varcolor)
        'Beschreibung
        Dim MaterialgruppenNr
        MaterialgruppenNr = objOberstoff.Value(prpMaterialgruppenNr, Nothing, varcolor)
        Dim MaterialUntergruppenNr
        MaterialUntergruppenNr = objOberstoff.Value(prpMaterialUntergruppenNr, Nothing, varcolor)
        Dim ERPNummer
        ERPNummer = objOberstoff.Value(prpERPNummer, Nothing, varcolor)
        Dim Firma
        Firma = objOberstoff.Value(prpFirma, Nothing, varcolor)
        lGesamt = lGesamt & Lieferant & ";" & LieferantenArtikel & ";" & Saison & ";" & Thema & ";" & LieferantenDessin & ";" & Dessin & ";" & LieferantenFarbe & ";" & Farben & ";" & Mengegeliefert & ";" & SmsNutzbreite & ";" & GewichtBrutto & Gewichtseinheit & ";" & Materialzusammensetzung & ";" & MaterialgruppenNr &  "/" & MaterialUntergruppenNr &  "/" & ERPNummer &  ";" & Firma & vbNewLine
        'MsgBox lGesamt & "lGesamt"
    Next

    lOutput = lOutput & lGesamt
    MsgBox lOutput
    desPath = "P:\Musterlaschenetiketten\"
    datName = saison & "-" & MwScriptObj.Property(4758).Value(0) & "-" & MwScriptObj.Property(4003).Value(0) & ".txt"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.CreateTextFile(desPath & datName)
    objFile.WriteLine(lOutput)
    objFile.Close
Next

Sample Image msgbox

这是输出文件中的内容:

Ipeker Tekstil A. S.;00553 Destiny;W8;T110;88361;745;;0335;;134;83G/QM;100CV;01/40/204;
Ipeker Tekstil A. S.;00553 Destiny;W8;T110;88361;745;IJ11/T200 frei;0935;;137;83G/QM;100CV;01/40/204;

这两行应该放在单独的文件中。

1 个答案:

答案 0 :(得分:0)

大概是这样:

  1. objOberstoff.Variations(propDefFb)返回2个结果,导致内部循环进行2次迭代。
  2. 每次迭代都将一行附加到lGesamt
  3. 内部循环完成后,这两行将连接到lOutput(实际上,应该会导致每个新文件包含所有个先前写入的数据,除非您像lGesamt一样,在外部循环的开头重置变量。

要解决此问题,您需要停止附加到变量,并移动将输出写入内部循环的代码。您还需要在输出文件名中添加某种索引,否则内部循环的后续迭代将覆盖输出文件。

我还建议将循环内不变的事物的定义移到循环内 (例如目标文件夹和FileSystemObject实例)。

将您的代码更改为类似的代码,它应该可以执行您想要的操作:

dst = "P:\Musterlaschenetiketten"

Set fso = CreateObject("Scripting.FileSystemObject")

For Each lnkOberstoff In MwScriptObj.Links(fldOberstoff)
    i = 1
    ...
    For Each varcolor In objOberstoff.Variations(propDefFb)
        ...
        lGesamt = Lieferant & ";" & LieferantenArtikel & ";" & Saison & ";" & _
                  Thema & ";" & LieferantenDessin & ";" & Dessin & ";" & _
                  LieferantenFarbe & ";" & Farben & ";" & Mengegeliefert & ";" & _
                  SmsNutzbreite & ";" & GewichtBrutto & Gewichtseinheit & ";" & _
                  Materialzusammensetzung & ";" & MaterialgruppenNr &  "/" & _
                  MaterialUntergruppenNr &  "/" & ERPNummer &  ";" & Firma

        fname = saison & "-" & MwScriptObj.Property(4758).Value(0) & "-" & _
                MwScriptObj.Property(4003).Value(0) & "_" & i & ".txt"

        Set objFile = fso.CreateTextFile(fso.BuildPath(dst, fname))
        objFile.WriteLine(lGesamt)
        objFile.Close
        i = i + 1
    Next
Next