Install the package via Composer:
composer require vendor/package-name
The Table class now includes two static methods for Excel-style column indexing:
getLetter(int $index) – Converts a numeric index (1-based) to its Excel column letter (e.g., 27 → 'AA').getIndex(string $letter) – Converts an Excel column letter back to its numeric index (e.g., 'AA' → 27).First use case:
// Convert index to letter (e.g., for CSV/Excel headers)
$columnLetter = \Vendor\Package\Table::getLetter(27); // 'AA'
// Convert letter back to index (e.g., for array keys)
$columnIndex = \Vendor\Package\Table::getIndex('AA'); // 27
Check the package docs for edge cases (e.g., handling 'Z' → 26, 'AA' → 27).
Dynamic Column Naming
Use getLetter() to generate Excel-style headers dynamically:
$headers = collect(range(1, 10))->map(fn($i) => \Vendor\Package\Table::getLetter($i));
// ['A', 'B', 'C', ..., 'J']
Data Export/Import Map array keys to Excel columns:
$data = ['AA' => 'Value1', 'AB' => 'Value2'];
$sortedData = collect($data)->sortKeys()->mapWithKeys(fn($value, $key) => [
\Vendor\Package\Table::getIndex($key) => $value
]);
API Responses Return structured column indices for frontend grids:
return response()->json([
'columns' => array_map(fn($i) => \Vendor\Package\Table::getLetter($i), range(1, 5))
]);
Laravel Excel: Use with Maatwebsite/Excel for seamless column mapping:
use Vendor\Package\Table;
public function export()
{
return Excel::download(new class extends BaseExport {
public function headings(): array
{
return array_map([Table::class, 'getLetter'], range(1, 5));
}
}, 'export.xlsx');
}
Validation: Sanitize user input for column letters:
$index = \Vendor\Package\Table::getIndex($request->input('column'));
if (!$index) throw new \InvalidArgumentException("Invalid column letter.");
1-Based Indexing
getLetter() expects a 1-based index (e.g., 1 → 'A', not '0' → 'A').
Fix: Adjust user input or subtract 1 if working with 0-based arrays:
$letter = \Vendor\Package\Table::getLetter($arrayKey + 1);
Case Sensitivity
getIndex() is case-insensitive but returns uppercase letters. Normalize input:
$index = \Vendor\Package\Table::getIndex(strtoupper($letter));
Overflow Handling
The method does not validate input ranges (e.g., getLetter(1000000) may fail silently).
Mitigation: Add bounds checking:
if ($index > 16384) throw new \RangeException("Column index too large.");
Test Edge Cases:
\Vendor\Package\Table::getLetter(26); // 'Z'
\Vendor\Package\Table::getLetter(27); // 'AA'
\Vendor\Package\Table::getIndex('Z'); // 26
\Vendor\Package\Table::getIndex('AA'); // 27
Performance: For bulk operations, cache results:
$cache = [];
$letters = range(1, 100)->map(fn($i) => $cache[$i] ?? \Vendor\Package\Table::getLetter($i));
Custom Alphabets: Extend the class to support non-English letters:
class CustomTable extends \Vendor\Package\Table {
public static function getLetter(int $index, string $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') { ... }
}
Locale Support: Override methods for RTL languages (e.g., Arabic numerals + letters).
How can I help you explore Laravel packages today?