Importar datos de Excel desde celdas específicas de ExcelTengo una situación en la que los datos que necesito analizar en JMP se almacenan de forma algo aleatoria en un archivo de Excel.Afortunadamente, puedo obtener fácilmente una lista de las celdas de Excel en las que se encuentran los datos, y me gustaría automatizar con JSL la importación de esos valores.Estoy buscando ideas sobre cómo hacer esto de manera efectiva y eficiente.
Por ejemplo, digamos que los datos que necesito en una sola columna en JMP se almacenan en estas celdas de Excel
E284, E400, E507, D615, E727, D852, E1003, E1114, D1220, D1339, E1493
Intenté usar Open () y especificar la hoja de trabajo, Fila inicial, Fila final, Columna inicial, Columna final para obtener cada valor en un archivo JMP con una sola fila/columna, por ejemplo
Open(
"C:\temp\worksheet.xlsx",
Worksheets( "sheet1" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 284 ), // get data on row 284
Data Starts on Column( 5 ), // get data on column "E" (the fifth column)
Data Ends on Row( 284 ), // get data on row 284
Data Ends on Column( 5 ), // get data on column "E" (the fifth column)
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
Luego obtendría un archivo de datos separado para cada valor que quiero recuperar de una celda específica y luego reuniría los valores en los archivos JMP separados en una tabla de datos en una columna.
Un problema al que me enfrento es que parece que cuando abre un archivo de Excel, se ignoran todas las filas en blanco en la parte superior de la hoja de cálculo de Excel.Entonces, la fila 1 no es realmente la fila 1 a menos que haya algunos datos en la fila 1. ¿Es eso cierto?
Cualquier otra idea sería útil.
secuencias de comandosRe: Importar datos de Excel desde celdas específicas de ExcelEncontré una solución más fácil en Excel.Hay una función INDIRECTA (cellref) en Excel que usa para obtener un resultado de una celda específica.Entonces pude hacer una nueva hoja de Excel y crear columnas que indican la hoja y la celda en la que se encuentran los datos y usar la función INDIRECTO para obtener una tabla de resultados que necesitaba para el análisis.
Sin embargo, creo que este problema destaca algunas mejoras necesarias para la importación de Excel en JMP.
Re: Importar datos de Excel desde celdas específicas de ExcelAquí hay un ejemplo (probablemente mejores formas de analizar XML, pero las funciones de coincidencia de patrones hacen el trabajo por mí:
/*----------------------------------------------------------------------
Method: getWorksheets
----------------------------------------------------------------------*/
getWorksheets = method({username=1},
// this technique (including the overhead of creating the class,
// is >300 x faster than getExcelWorksheets on Mac
// and >100 x faster on Windows
workbook = "xl/workbook.xml";
za = open(_excelFilePath,zip);
contents = za<<READ>>sheet + "\!""
+ " sheetId=\!"" + PatRepeat(PatNotAny("\!"")) + "\!""
+ (" r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"" | " state=\!"hidden\!"" + " r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"")>>x;
ismatch = 1;
lstWorksheets = {};
while(ismatch,
ismatch = patmatch(contents,pat,"");
if (!contains(x,"hidden"),
substituteinto(sheet,"&","&");
if (!contains(lstWorksheets,sheet),
insertinto(lstWorksheets,sheet)
)
)
);
return(lstWorksheets);
),</READ>Re: Importar datos de Excel desde celdas específicas de ExcelEsa es una idea interesante.No tenía idea de que eso era lo que había "debajo del capó" de un archivo XLSX.
Re: Importar datos de Excel desde celdas específicas de ExcelEste es un truco un poco extremo, aunque utilizo técnicas similares para crear archivos PPTX y DOC...
XLSX es solo un archivo zip que contiene archivos XML.Puede usar el XML para hacer referencia a las coordenadas de las celdas:

Puede usar ZipArchive para acceder a los archivos XML.
Re: Importar datos de Excel desde celdas específicas de ExcelAcabo de recordar que, sí, en efecto, para una hoja de cálculo de Excel con celdas vacías en la parte superior de la hoja, esas filas se ignoran.Ver https://www.jmp.com/support/notes/60/026.html
y Mejora de importación de Excel: Mostrar números de fila y etiquetas de columna en la vista previa de importación
Re: Importar datos de Excel desde celdas específicas de ExcelLa respuesta simple es "no".Si tuviera alguna otra forma de hacer referencia a la ubicación de los datos, probaría su enfoque, pero en este caso, la referencia de celda de Excel es la forma principal de encontrar los datos.
Re: Importar datos de Excel desde celdas específicas de Excel¿Tiene información que pueda usar para identificar las celdas que no sean la referencia de celda de Excel?Por ejemplo, ¿tal vez una etiqueta de campo?Por lo general, cargo los datos de Excel en JMP con un procesamiento mínimo, luego simplemente itero sobre filas y columnas en busca de información clave.Por lo general, el primer escaneo identificará la columna que contiene las etiquetas de campo que me interesan y el segundo escaneo cargará los valores de campo.De esta manera, puedo crear listas de datos a partir de las cuales puedo crear una tabla o información de encabezado que puedo establecer como variables de tabla.
Por ejemplo, escanear para encontrar una columna que contenga una etiqueta de campo específica
identifier = "Description";
cols = dt<<GETCOLUMNNAMES> </GETCOLUMNNAMES>
Y luego buscar campos
fields = [=>];
fields["Description"] = 0;
fields["USL"] = 0;
fields["LSL"] = 0;
fields["Nominal"] = 0;
keys = fields << getKeys;
for (i=1,i<=nitems(keys),i++,
field = keys[i];
success = 0;
for (r=1,r<=nrow(dt),r++,
cell = column(dt,lblCol)[r];
if (contains(cell,field),
success = 1;
fields[field] = r;
break()
)
)
);