This example demonstrates how to examine and manipulate Excel cell addresses.
// Function: MyAddress // Returns: LPXLOPER // Description: Returns the address of the input range //{{XLP_SRC(MyAddress) // NOTE - the FunctionWizard will add and remove mapping code here. // DO NOT EDIT what you see in these blocks of generated code! IMPLEMENT_XLLFN2(MyAddress, "RR", "MyAddress", "Range", "User Defined", "Returns the address of the input range", "Input range\000", "\0", 1) extern "C" __declspec( dllexport ) LPXLOPER MyAddress(const CXlOper* lpxlopRange) { CXlOper xloResult; //}}XLP_SRC // Is the argument a reference ? if ( lpxlopRange->IsRef() ) { // Build up the full address of each range // eg "[Book1.xls]Sheet1!A1:B1" CString sAddress, sSheetName; // Start with the sheet name sSheetName = lpxlopRange->GetSheetName() + "!"; // Count the number of ranges WORD cRefs = lpxlopRange->GetRefCount(), nRef; // Add each of the ranges for ( nRef = 0; nRef < cRefs; nRef++ ) { // Put a comma between each range if ( nRef > 0 ) sAddress += ","; // Append the address of each reference as a string; // the TRUE argument to ToString indicates that A1 // style references should be used, rather than R1C1. sAddress += sSheetName + lpxlopRange->GetRefItem(nRef).ToString(TRUE); } // Copy the address to the result CXlOper xloResult = sAddress; } // If the argument is not a reference, return #N/A else xloResult = xlerrNA; return xloResult.Ret(); }
CXlOper::IsRef | CXlOper::GetSheetName | CXlOper::GetRefCount | CXlOper::GetRefItem | CXlRef::ToString