Excel formula 将一个excel工作簿中的值与另一个工作簿中的值进行比较

Excel formula 将一个excel工作簿中的值与另一个工作簿中的值进行比较,excel-formula,phpexcel,Excel Formula,Phpexcel,我有两本excel工作簿Workbook1有URL列表,而其他URL列表,即Workbook2与URL列表一起还有几个列 工作手册1: COLUMN A url_list url1 url2 url3 url 工作手册2: COLUMN A COLUMN B COLUMN C Key Words URL Jan 2015 Website searc

我有两本excel工作簿
Workbook1
有URL列表,而其他URL列表,即
Workbook2
与URL列表一起还有几个列

工作手册1:

COLUMN A
url_list
url1
url2
url3
url
工作手册2:

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
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
我想比较
workbook1(A列)
workbook2(B列)
中的URL列表

如果
workbook1
中的任何url在
workbook2
中丢失,则最后必须将其添加到
workbook2

例如: 现在,workbook2中不存在
url
,因此它将被添加,如下所示 工作手册2:

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
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
我在Windows7中使用库phpexcel在php中处理excel工作表。 是否有任何直接的excel公式可以这样做? 我知道用php我可以做到这一点


谢谢

从工作簿1复制列A(不包括标题)并附加到工作簿2的列B,然后将Excel的删除重复项应用到工作簿2的列B。删除重复项应该删除示例中的所有条目,但您可以先从Workbook2中删除B2(或B1),以避免出现这种情况。

我在这里发布了一个非常简单的方法

这不是一个“直接公式”,但它可能对你有用。 我假设您的资料来源是同一工作簿中的
Sheet1
Sheet2
,很容易适应您的需要。 应采取的步骤:

  • Sheet1
    中添加帮助器列: 在B2中输入公式
    =IF(匹配($A2,Sheet2!$B$2:$B$5,0)),行(),100000)
    。 向下复制。这将提取要复制的URL的行号,使用比其他URL的行号大的数字(这里是100000)。更换
    Sheet2$B$2:$B$5
    按实际范围

  • 设置要复制的URL的索引列表N:在
    Sheet2
    中找到最后一行(示例中为6)下方的单元格和最后一行右侧的列(示例中为D)。输入顺序1,2,。。。从那间牢房下来

  • 选择要复制的第n个URL:在B6中输入公式
    =OFFSET(Sheet1!$A$2,SMALL(Sheet1!$B:$B,D6)-2,0)
    。抄下来


  • 我有一个类似的任务,我一直在不懈地编译一些代码。虽然不存在内置的比较函数,但我在这里从两个不同的工作簿(.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');
    
    我们正在从迁移到。以下是我在phpunit测试中使用的代码片段,用于使用
    PhpSpreadsheet
    比较2个excel文件:

        // compare files
        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
        // no need to read styles, we just care about data
        $reader->setReadDataOnly(true);
        // load expected file (stored somewhere in the tests directory)
        $spreadsheetExpected = $reader->load($expectedFilePath);
        // load the generated file
        $spreadsheetActual = $reader->load($actualFilePath);
        // loop through 3 pages, indices 0, 1, and 2
        foreach (range(0, 2) as $sheet) {
            // loop through 2 rows
            foreach (range(1, 20) as $row) {
                // loop through first 6 columns
                foreach (['A', 'B', 'C', 'D', 'E', 'F'] as $column) {
                    // find coordination
                    $cell = $column . $row;
                    // get expected cell value
                    $expected = $spreadsheetExpected->getSheet($sheet)->getCell($cell)->getValue();
                    // get actual cell value
                    $actual = $spreadsheetActual->getSheet($sheet)->getCell($cell)->getValue();
                    // compare values, show the sheet and coordination in case of failure 
                    $this->assertEquals($expected, $actual, "Mismatch in sheet {$sheet}, cell {$cell}");
                }
            }
        }
    

    显然,此测试在第一次不匹配时失败。

    您要做的是执行一个操作,而不是评估一个函数。即使区别并不总是那么明确,在这种情况下,我想你需要一个VBA
    Sub
    。除了VBA,我不能在phpexcel中使用吗?和公式来比较我认为在PHPExcel中的其他功能,很可能你可以用PHPExcel来实现。您要执行的操作似乎非常基本。但我对PHPExcel不熟悉。你觉得有什么有用的答案吗?