Rechercher des tables de requête et des objets de liste liés aux connexions de données externes

Rechercher des tables de requête et des objets de liste liés aux connexions de données externes

Parfois, vous devez trouver des tables de requête et des objets de liste liés à une connexion de données externe. Les tables de requête sont liées à l’objet de connexion de données externes avec l’ID de connexion, tandis que les objets de liste sont liés à une table de requête.

L’exemple de code suivant explique comment vous pouvez rechercher des tables de requête et des objets de liste liés à la connexion de données externes. Le code utilise leexemple de fichier excel que vous pouvez télécharger à partir du lien fourni. Vous pouvez également voir la sortie de cet exemple de code au bas de cet article.

// 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

Sortie console

Voici la sortie de la console de l’exemple de code ci-dessus en utilisant thisexemple de fichier 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