várias entradas do arquivo excel existente

0

nosso cliente nos fornece um arquivo excel listando os nomes dos drivers e o número de tickets que eles recebem para um sorteio gratuito, como "bill smith (próxima coluna) 17 tickets

existe uma maneira de fazer isso e fazer 17 entradas separadas para "bill Smith", para que possamos imprimir mais de 5000 ingressos no total para todos os 286 drivers? alguns ganham 1, outros 5, outros ...

atualmente, repetimos manualmente os nomes dos drivers quantas vezes for necessário.

nós os imprimimos fazendo uma mala direta para um modelo de etiqueta 2x3 avery e depois os separamos.

John
fonte
A pergunta Como dividir uma linha em várias linhas com o Excel? parece relacionado; você pode usar (adaptar) uma das respostas lá.
G-Man

Respostas:

0
  1. Modifique o arquivo para que ele tenha as seguintes propriedades:
    • Coluna A: Cabeçalho é "Nome". Todas as células contêm os nomes das pessoas a serem emitidas tickets.
    • Coluna B: O cabeçalho é "Número". Todas as células contêm o número de tickets a serem atribuídos à pessoa listada na mesma linha na coluna A. Nenhum outro texto está incluído.
    • Nenhum outro dado está incluído na folha com as informações "Nome" e "Número".
  2. Com a planilha que contém as informações "Nome" e "Número" selecionadas, salve o arquivo como CSV (delimitado por vírgula). Para fins de exemplo, usaremos OrigCSV.csv para o nome do arquivo.
  3. Abra uma sessão do PowerShell e navegue até a pasta que contém o CSV que você acabou de salvar.
  4. Execute o seguinte comando:
    • $x=ipcsv .\OrigCSV.csv;$x|%{for($y=1;$y-le$_.Number;$y++){$_.Name}}|Out-File NewCSV.csv
  5. Abra NewCSV.csv e verifique se os nomes estão listados da maneira e número que você deseja.

Se você precisar de mais do que apenas o nome duplicado, ainda é possível com o PowerShell - apenas um pouco mais "interessante".

Aqui está uma versão expandida e comentada da linha de comando fornecida acima:

<#
    First set $x so that it contains everything in OrigCSV.csv.
    Each line of the CSV will be an array element within $x, with "Name" and "Number" properties according to their entry in the CSV.

    ipcsv is a built-in alias for Import-Csv
#>
$x=ipcsv .\OrigCSV.csv;
<#
    Next step is to put all the objects in $x through a ForEach-Object loop.

    % is a built-in alias for ForEach-Object.
#>
$x|%{
    <#
        Within ForEach-Object, we're starting a For loop.
        The loop definition starts with setting a counter, $y, to 1.
        Then, if $y is less than or equal to the current line item's "Number" property, the script block will execute.
        After the script block executes, it will increment $y by 1 and check the loop condition again.
        Once $y becomes greater than the current line item's "Number" property, the For loop will exit.
    #>
    for($y=1;$y-le$_.Number;$y++)
    {
        # This next line simply outputs the "Name" property of the current line item.
        $_.Name
    # After the For loop exits, the script will return to the ForEach-Object loop and proceed to put the next item into the For loop.
    }
# After ForEach-Object is done with its work, we pipe all of the output to Out-File so that the list gets written to a new CSV file.
}|Out-File NewCSV.csv
Iszi
fonte
0

Aqui está uma solução VBA. Primeiro, selecione os dados que você possui em duas colunas. Não selecione os cabeçalhos das colunas, se existirem.

Em seguida, coloque esse código em um módulo e execute-o. (Para obter instruções sobre como fazer isso, consulte esta postagem .)

Sub TicketList()
'Two columns of drivers and ticket counts should be selected (no headers) before running this Sub.
Dim drivers() As Variant, output() As Variant, shtOut As Worksheet
Dim i As Long, j As Long, k As Long, scount As Integer
drivers = Selection.Value
'Set size of output array to match total number of tickets
ReDim output(1 To Application.WorksheetFunction.Sum(Selection), 1 To 1) As Variant
For i = LBound(drivers, 1) To UBound(drivers, 1)
    For j = 1 To drivers(i, 2)
        k = k + 1
        output(k, 1) = drivers(i, 1)
    Next j
Next i
'Place tickets on new sheet named "Driver Tickets #"
For Each sht In ThisWorkbook.Sheets
    If InStr(sht.Name, "Driver Tickets") > 0 Then scount = scount + 1
Next sht
Set shtOut = Sheets.Add
If scount = 0 Then
    shtOut.Name = "Driver Tickets"
Else
    shtOut.Name = "Driver Tickets " & CStr(scount + 1)
End If
'Print output on the new sheet
shtOut.Range("A1").Resize(UBound(output, 1), 1).Value = output
End Sub

Isso criará a lista de nomes para tickets em uma nova planilha denominada "Driver Tickets".

Excellll
fonte