Excel formula 将一个excel工作簿中的值与另一个工作簿中的值进行比较
我有两本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
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
按实际范围Sheet2
中找到最后一行(示例中为6)下方的单元格和最后一行右侧的列(示例中为D)。输入顺序1,2,。。。从那间牢房下来=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}");
}
}
}
显然,此测试在第一次不匹配时失败。您要做的是执行一个操作,而不是评估一个函数。即使区别并不总是那么明确,在这种情况下,我想你需要一个VBASub
。除了VBA,我不能在phpexcel中使用吗?和公式来比较我认为在PHPExcel中的其他功能,很可能你可以用PHPExcel来实现。您要执行的操作似乎非常基本。但我对PHPExcel不熟悉。你觉得有什么有用的答案吗?