2015-01-09 3 views
1

У меня есть две книги Excel. Workbook1 имеет список адресов и т. Д. Workbook2 имеет вместе со списком адресов еще несколько столбцов.Сравните значения одной книги Excel с другой

Workbook1:

COLUMN A 
url_list 
url1 
url2 
url3 
url 

Workbook2:

COLUMN A       COLUMN B   COLUMN C 
Key Words       URL    Jan 2015 
Website search Engine Optimisation url1    72614 
Website search Engine Optimisation url2    20890 
Website search Engine Optimisation url3    133968 
Engine Optimisation     url7    584625 

Я хочу, чтобы сравнить список ссылок из workbook1(Column A) с workbook2(Column B).

Если в адресе workbook1 отсутствует workbook2, его необходимо добавить в workbook2.

Например: Теперь url нет в workbook2, так что это будет добавить, и будет выглядеть следующим образом Workbook2:

COLUMN A       COLUMN B   COLUMN C 
Key Words       URL    Jan 2015 
Website search Engine Optimisation url1    72614 
Website search Engine Optimisation url2    20890 
Website search Engine Optimisation url3    133968 
Engine Optimisation     url7    584625 
            url 

Я использую библиотеку PHPExcel работать с первенствовать листов в PHP в windows 7. Также есть ли какая-либо прямая формула excel? Я знаю с php, я могу это сделать.

Благодаря

+0

Что вы хотите сделать, это выполнить действие, более чем оценивая функцию. Даже если различие не всегда так ясно, в этом случае, я думаю, вам понадобится VBA 'Sub'. –

+0

другие, то VBA я не могу сделать в phpexcel? и формула просто сравнить другие функции, которые я думал в phpexcel – Penny

+0

Скорее всего, вы можете сделать это с помощью PHPExcel. Операция, которую вы хотите выполнить, кажется очень простой. Но я не знаком с PHPExcel. –

ответ

0

Copy Columna (за исключением заголовка/с) от Workbook1 и добавить к ColumnB из Workbook2 затем применить Excel удалим дублирующееся ColumnB из Workbook2. Удаление дубликатов должно удалить все записи из вашего примера, но сначала вы можете отключить B2 (или, может быть, B1) из Workbook2, чтобы избежать этого.

0

Я отправляю здесь очень простой метод.

Это не «прямая формула», но это может сработать для вас. Предполагаю, что ваши источники: Sheet1 и Sheet2 в той же книге, легко адаптироваться к вашим потребностям. Шаги:

  1. Добавить вспомогательный столбец в Sheet1: Введите формулу =IF(ISNA(MATCH($A2,Sheet2!$B$2:$B$5,0)),ROW(),100000) в В2. Скопировать вниз. Это позволит извлечь номера строк URL-адресов для копирования, используя число, большее, чем для остальных (100000 здесь). Замените Sheet2!$B$2:$B$5 на фактический диапазон.

  2. указан список индексов N из URL, чтобы скопировать: Найдите в Sheet2 ячейку в строке чуть ниже последнего (6 в вашем примере) и столбец находится справа от последнего (D в вашей дело). Введите последовательность 1,2, ... из этой ячейки вниз.

  3. Выберите N-й URL-адрес для копирования: Введите формулу =OFFSET(Sheet1!$A$2,SMALL(Sheet1!$B:$B,D6)-2,0) в B6. Скопируйте вниз.

Вариации на это могут быть произведены.

1

У меня есть аналогичная задача, и я неустанно работаю над составлением кода.Несмотря на то, что нет встроенных функций сравнения, я получаю данные из двух разных книг здесь (файлы .xlsx), извлекает определенные столбцы из двух таблиц, удаляет ненужные данные из данных и сохраняет значения в двух разных ассоциативных массивах. Затем я могу использовать встроенные функции php для сравнения массивов. Затем вы можете выбрать значения, которые вы собираетесь записать на новый рабочий лист. Мне все еще нужно сделать больше работы, связанной с моей задачей, но я надеюсь, что это когда-нибудь поможет кому-то.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 
date_default_timezone_set('Europe/London'); 

define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); 

/** Include PHPExcel */ 
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php'; 

//set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/'); 
//include_once 'Lib/PHPExcel.php'; 

$fileType = 'Excel2007'; 
$fileName = 'testBook.xlsx'; 
// Create new PHPExcel object 
echo date('H:i:s') , " Create new PHPExcel object" , EOL; 
$objPHPExcel = new PHPExcel(); 
$objPHPExcelXX = new PHPExcel(); 
$objPHPExcelW = new PHPExcel(); 
// Read the file 
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$objReaderXX = PHPExcel_IOFactory::createReader($fileType); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelW, 'Excel2007'); 

$objReader->setReadDataOnly(true); 
$objReaderXX->setReadDataOnly(true); 
try { 
    $objPHPExcel = $objReader->load("Gemeinde_Bad_Rothenfelde.xlsx"); 
    $objPHPExcelXX = $objReaderXX->load($fileName); 

    $objWorksheet = $objPHPExcel->getActiveSheet(); 
    $objWorksheetXX = $objPHPExcelXX->getActiveSheet(); 
    print($objWorksheet->getTitle()); 
    print($objWorksheetXX->getTitle()); 
//$objColumn = $objWorksheet->getHighestColumn(); 
//$objOtherCols = $objWorksheet->getHighestColumn(); 
    $highestRow = $objWorksheetXX->getHighestRow(); 
    $gemendeHighest = $objWorksheet->getHighestRow(); 
    }catch(Exception $e) { 
      die($e->getMessage()); 
    } 

print("\n"); 
$arrayOrtStr = array(); 
$arrayGemStr = array(); 
$count = 1; 
$i = 0; 
//$colOrtXX is column in primus sheet, $colOrts is column in Gemeinde sheet,the numbers are the real column numbers in the sheets 
for ($row = 1, $colOrtXX=1, $colOrtsT=7, $colOrtsTeil=2,$colStrXX=3, $colOrt=6,$colStr = 10; $row <= $highestRow; $row++) { 
    //$cell = $objWorksheet->getCell($objColumn.$row); 
    //Getting cell values for Primus Sheet (Columns PostOrt,PostOrtsteil,PostStrasse) 
    $cellOrtXX = $objWorksheetXX->getCellByColumnAndRow($colOrtXX,$row); 
    $cellStrXX = $objWorksheetXX->getCellByColumnAndRow($colStrXX,$row)->setDataType(PHPExcel_Cell_DataType::TYPE_STRING); 
    $cellOrtsTeil = $objWorksheetXX->getCellByColumnAndRow($colOrtsTeil,$row); 
    $valOrtXX = $cellOrtXX->getValue(); 
    $valStrXX = $cellStrXX->getValue(); 
    $valOrtsTeil = $cellOrtsTeil->getValue(); 
    // Get cell values for Gemeinde sheet (Columns Ort and Strasse) 
    $cellOrt = $objWorksheet->getCellByColumnAndRow($colOrt,$row); 
    $cellStr = $objWorksheet->getCellByColumnAndRow($colStr,$row)->setDataType(PHPExcel_Cell_DataType::TYPE_STRING); 
    //$cellOrtsT = $objWorksheet->getCellByColumnAndRow($colOrtsT,$row); 
    $valOrt = $cellOrt->getValue(); 
    $valStr = $cellStr->getValue(); 
    // array populated for strasse column in gemeinde sheet but numbers stripped off the address 
    $onlyStr = preg_replace('/[0-9]+/','',$valStr); 
    $arrayGemStr[$i] = array("Strasse"=>$onlyStr); 

    // Go through the Strasse column, only pick cells with Ort Bad Rothenfelde..compare and write 
    if($valOrtXX == "Bad Rothenfelde"){ 
     // Creating associative array with Ortsteil and Strasse from Primus sheet 
     $arrayOrtStr[$i] = array("OrtsTeil"=>$valOrtsTeil,"Strasse"=>$valStrXX);  
    } 
    $i++; 
    //print_r($array); 
} 

$ortTeil = array(); 
$contentFound = array(); 
$withStr = array(); 
foreach($arrayOrtStr as $arr) { 
    $contentFound[] = $arr['Strasse']; 
} 
foreach($arrayOrtStr as $arr) { 
    if(in_array($arr['Strasse'], $contentFound)){ 
      $ortTeil[] = $arr["OrtsTeil"]; 
      $withStr[] = $arr["Strasse"]; 
     } 
    } 

echo '<br/>========================================================<br/>'; 
print_r($ortTeil); 
print_r($withStr); 




// Write the Excel file to filename some_excel_file.xlsx in the current directory 
//$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcelW); 
//$objWriter->save('Gemeinde_Bad_.xlsx'); 
Смежные вопросы