Sub AsignarNumerosAleatoriosPorGrupo()
Dim ultimaFila As Long
Dim grupos As Object
Dim grupo As String
Dim fila As Long
Dim numero As Integer
Dim usados As Object
Set grupos = CreateObject("Scripting.Dictionary")
ultimaFila = Cells(Rows.Count, "C").End(xlUp).Row
Randomize
For fila = 2 To ultimaFila
grupo = Trim(Cells(fila, "C").Value)
If grupo <> "" Then
If Not grupos.Exists(grupo) Then
Set grupos(grupo) = CreateObject("Scripting.Dictionary")
End If
Set usados = grupos(grupo)
If usados.Count >= 50 Then
Cells(fila, "G").Value = "SIN NÚMERO"
Else
Do
numero = Int((50 * Rnd) + 1)
Loop While usados.Exists(numero)
usados.Add numero, True
Cells(fila, "G").Value = numero
End If
End If
Next fila
MsgBox "Números asignados correctamente.", vbInformation
End Sub
import csv
import sys
import os
import tempfile
import shutil
from datetime import datetime
FORMATOS_FECHA = [
"%Y-%m-%d", # 2000-05-17
"%d/%m/%Y", # 17/05/2000
"%m/%d/%Y", # 05/17/2000
"%d-%m-%Y", # 17-05-2000
"%Y/%m/%d", # 2000/05/17
"%b %d, %Y", # May 17, 2000
"%B %d, %Y", # May 17, 2000
]
def es_numero(valor):
valor = valor.strip()
if valor == "":
return False
try:
float(valor)
return True
except ValueError:
return False
def es_fecha(valor):
valor = valor.strip()
if valor == "":
return False
for formato in FORMATOS_FECHA:
try:
datetime.strptime(valor, formato)
return True
except ValueError:
pass
return False
def convertir_valor(valor):
valor_limpio = valor.strip()
if es_numero(valor_limpio):
if "." in valor_limpio:
return float(valor_limpio)
return int(valor_limpio)
if es_fecha(valor_limpio):
return FechaSinComillas(valor_limpio)
return valor
class FechaSinComillas(str):
pass
class EscritorCSVPersonalizado:
def __init__(self, archivo, delimiter=","):
self.archivo = archivo
self.delimiter = delimiter
def escribir_fila(self, fila):
campos = []
for valor in fila:
if isinstance(valor, (int, float)):
campos.append(str(valor))
elif isinstance(valor, FechaSinComillas):
campos.append(str(valor))
else:
texto = str(valor)
texto = texto.replace('"', '""')
campos.append(f'"{texto}"')
self.archivo.write(self.delimiter.join(campos) + "\n")
def reescribir_csv_textos_con_comillas(ruta_csv):
if not os.path.isfile(ruta_csv):
print(f"Error: el archivo no existe: {ruta_csv}")
sys.exit(1)
carpeta = os.path.dirname(os.path.abspath(ruta_csv))
with open(ruta_csv, "r", encoding="utf-8-sig", newline="") as entrada:
lector = csv.reader(entrada)
with tempfile.NamedTemporaryFile(
"w",
encoding="utf-8",
newline="",
delete=False,
dir=carpeta
) as temporal:
escritor = EscritorCSVPersonalizado(temporal)
for fila in lector:
fila_convertida = [convertir_valor(valor) for valor in fila]
escritor.escribir_fila(fila_convertida)
ruta_temporal = temporal.name
shutil.move(ruta_temporal, ruta_csv)
print(f"Archivo reescrito correctamente: {ruta_csv}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Uso:")
print("python poner_comillas_texto_csv.py archivo.csv")
sys.exit(1)
archivo_csv = sys.argv[1]
reescribir_csv_textos_con_comillas(archivo_csv)