Encuentre tablas de consulta y objetos de lista relacionados con conexiones de datos externas

Encuentre tablas de consulta y objetos de lista relacionados con conexiones de datos externas

A veces, necesita encontrar tablas de consulta y objetos de lista relacionados con alguna conexión de datos externa. Las tablas de consulta están relacionadas con el objeto de conexión de datos externos con ID de conexión, mientras que los objetos de lista están relacionados con una tabla de consulta.

El siguiente código de ejemplo explica cómo puede encontrar tablas de consulta y objetos de lista relacionados con la conexión de datos externos. El código utiliza elejemplo de archivo de Excel que puede descargar desde el enlace proporcionado. También puede ver el resultado de este código de muestra al final de este artículo.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
public static void main(String[] args) throws Exception {
// The path to the documents directory
String dataDir = Utils.getSharedDataDir(FindReferenceCellsFromExternalConnection.class) + "tables/";
// Load workbook object
Workbook workbook = new Workbook(dataDir + "sample.xlsm");
// Check all the connections inside the workbook
for (int i = 0; i < workbook.getDataConnections().getCount(); i++) {
ExternalConnection externalConnection = workbook.getDataConnections().get(i);
System.out.println("connection: " + externalConnection.getName());
PrintTables(workbook, externalConnection);
System.out.println();
}
}
public static void PrintTables(Workbook workbook, ExternalConnection ec) {
// Iterate all the worksheets
for (int j = 0; j < workbook.getWorksheets().getCount(); j++) {
Worksheet worksheet = workbook.getWorksheets().get(j);
// Check all the query tables in a worksheet
for (int k = 0; k < worksheet.getQueryTables().getCount(); k++) {
QueryTable qt = worksheet.getQueryTables().get(k);
// Check if query table is related to this external connection
if (ec.getId() == qt.getConnectionId() && qt.getConnectionId() >= 0) {
// Print the query table name and print its "Refers To"
// range
System.out.println("querytable " + qt.getName());
String n = qt.getName().replace('+', '_').replace('=', '_');
Name name = workbook.getWorksheets().getNames().get("'" + worksheet.getName() + "'!" + n);
if (name != null) {
Range range = name.getRange();
if (range != null) {
System.out.println("Refers To: " + range.getRefersTo());
}
}
}
}
// Iterate all the list objects in this worksheet
for (int k = 0; k < worksheet.getListObjects().getCount(); k++) {
ListObject table = worksheet.getListObjects().get(k);
// Check the data source type if it is query table
if (table.getDataSourceType() == TableDataSourceType.QUERY_TABLE) {
// Access the query table related to list object
QueryTable qt = table.getQueryTable();
// Check if query table is related to this external
// connection
if (ec.getId() == qt.getConnectionId() && qt.getConnectionId() >= 0) {
// Print the query table name and print its refersto
// range
System.out.println("querytable " + qt.getName());
System.out.println("Table " + table.getDisplayName());
System.out.println("refersto: " + worksheet.getName() + "!"
+ CellsHelper.cellIndexToName(table.getStartRow(), table.getStartColumn()) + ":"
+ CellsHelper.cellIndexToName(table.getEndRow(), table.getEndColumn()));
}
}
}
}
}// end-PrintTables

Salida de consola

Aquí está la salida de la consola del código de muestra anterior usando esteejemplo de archivo de Excel.

connection: AAPL Connection

querytable hp?s=AAPL+Historical+Prices

refersto: =Sheet1!$Q$1:$W$69

connection: BOSL066360W7_SQLEXPRESS Test

querytable BOSL066360W7_SQLEXPRESS Test

Table Table_BOSL066360W7_SQLEXPRESS_Test

refersto: Sheet1!A1:B3

connection: BOSL066360W7_SQLEXPRESS Test1

querytable BOSL066360W7_SQLEXPRESS Test_1

Table Table_BOSL066360W7_SQLEXPRESS_Test_1

refersto: Sheet1!D1:E2

connection: UWTI Connection

querytable hp?s=UWTI+Historical+Prices

refersto: =Sheet1!$H$1:$N$69