2014-11-13 9 views
2

Используя PHPExcel, я хотел бы пропустить все именованные диапазоны в рабочей книге, а затем создать новую вкладку для каждой из них.Получить именованные диапазоны в PHPExcel

В настоящее время я делаю это в Excel с помощью макроса, например, так:

Dim sheetName As String 
sheetName = ActiveSheet.Name 

Dim nName As Name 

For Each nName In Names 
    If InStr(1, nName.RefersTo, sheetName) > 0 Then 
     Application.Goto Reference:=nName.Name 
     Selection.Copy 
     Sheets.Add After:=Sheets(Sheets.Count) 
     ActiveSheet.Name = nName.Name 
     Selection.PasteSpecial Paste:=xlPasteValues 
    End If 
Next nName 
mystring = Sheets(1).Name 
ActiveWorkbook.SaveCopyAs Filename:="P:\DP\CWBI\" & mystring & "_parsed.xls" 

я могу проходных активные листы в PHPExcel и сбрасывать их в массив для обработки, например:

$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$sheets = $objReader->listWorksheetNames($file); 

print_r ($sheets); 

Кто-нибудь знает, можно ли пройти все именованные диапазоны?

Edit:

Пытаюсь первое предложение ниже, но не получаю никакого вывода. Вот код:

$file="span_test.xlsx"; 
$objPHPExcel = PHPExcel_IOFactory::load($file); 

foreach($objPHPExcel->getNamedRanges() as $name => $namedRange) { 
    echo $namedRange . "</br>"; 
} 

Получил это сейчас, моя ошибка в попытке эха объекта. должен быть

print_r($name) 

ответ

4

Вы должны фактически загрузить книгу, чтобы получить доступ к именованным диапазонам

foreach($objPHPExcel->getNamedRanges() as $name => $namedRange) { ... } 

, который возвращает объект PHPExcel_NamedRange для каждого именованного диапазона

+0

Я попробовал ваше предложение, но я "м не получая никакого выхода. См. выше. Я должен что-то делать неправильно. – user3101337

+0

$ namedRange будет объектом PHPExcel_NamedRange, а не скалярным значением, как строка. 'echo ''", $ namedRange-> getWorksheet(), "'!" , $ namedRange-> getRange(); ' –

Смежные вопросы