首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较一个excel工作簿与另一个excel工作簿中的值。

比较一个excel工作簿与另一个excel工作簿中的值。
EN

Stack Overflow用户
提问于 2015-01-09 17:40:33
回答 4查看 3.1K关注 0票数 1

我有两个excel工作簿。Workbook1有urls列表,也就是说,Workbook2除了urls列表之外,还有更多的列。

Workbook1:

代码语言:javascript
复制
COLUMN A
url_list
url1
url2
url3
url

Workbook2:

代码语言:javascript
复制
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)的urls列表。

如果workbook2中缺少来自workbook1的任何url,那么最后必须将其添加到workbook2中。

例如:现在workbook2中不存在url,因此它将被添加,并且将看起来像这样的Workbook2:

代码语言:javascript
复制
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库在windows7的php中处理excel表格,有没有什么直接的excel公式?我知道用php我可以做到这一点。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2015-09-19 02:26:12

我也有类似的任务,我一直在不知疲倦地编译一些代码。虽然不存在比较内置函数,但我在这里从两个不同的工作簿(.xlsx文件)中获取数据,从两个工作表中检索特定列,从数据中去除不必要的内容,并将值存储在两个不同的关联数组中。然后,我可以使用内置的php函数来比较数组。然后,您可以选择要写入新工作表的值。我仍然需要做更多与我的任务相关的工作,但我希望有一天这会对某些人有所帮助。

代码语言:javascript
复制
    <?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');
票数 2
EN

Stack Overflow用户

发布于 2015-01-22 04:58:42

从Workbook1复制ColumnA (不包括header/s)并附加到Workbook2的ColumnB,然后将Excel的删除重复项应用到ColumnB的Workbook2。删除重复项应该会删除示例中的所有条目,但您可以先从Workbook2中清空B2 (或者可能是B1)以避免这种情况。

票数 0
EN

Stack Overflow用户

发布于 2015-01-22 07:36:35

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

这不是一个“直接公式”,但它可能对你有效。我会假设你的源代码是Sheet1Sheet2在同一个工作簿,它很容易适应你的需求。要遵循的步骤:

在公式中输入帮助器列

  1. Add Sheet1 =IF(ISNA(MATCH($A2,Sheet2!$B$2:$B$5,0)),ROW(),100000) in B2。向下复制。这将提取要复制的URL的行号,使用一个比其余URL的行号更大的数字(这里是100000)。将Sheet2!$B$2:$B$5替换为实际的range.
  2. Set要复制的URL的索引列表N:在Sheet2中,定位最后一行(在您的示例中为6)下的单元格和最后一行右侧的单元格(在本例中为D)。输入序列1,2,...从该单元格down.
  3. Pick第NURL复制:在B6中输入公式=OFFSET(Sheet1!$A$2,SMALL(Sheet1!$B:$B,D6)-2,0)。复制下来。

可以在此基础上产生各种变体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27857664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档