0

我有一个包含单元格数据和相应位置的数据库表。我想使用 PHP 显示一个 html 表,其中数据库中“单元格数据”列中的数据位于同一记录的“单元格位置”列中。我要怎么做。是否可以仅在 mysql 中获取数据?如果没有任何关于实现这一目标的观点,那将是最受欢迎的。

excel格式用于存储单元格位置。

                 Cell Data     Cell Position
                  Hello             A1
                  Bello             C2

编辑
我欢迎编程解决方案,如果不只是使用 mysql。但我不想要任何我知道我可以用 PHPExcel 做到这一点的库......

4

2 回答 2

1

如果它只是 AZ 列,那么这是一个简单的答案

SELECT celldata,
       SUBSTR(cellposition,1,2) AS column,
       SUBSTR(cellposition,2) AS row,
       cellposition
  FROM mytable
 ORDER BY 3,2

当您可能有额外的列,如“AA”、“AZ”、“BA”等时,它会变得有点困难......不仅仅是提取列/行;还要处理列排序...我仍在为此寻找解决方案。在没有实际写出来的情况下,我会对单元格位置测试的第 2、3、4 个字符进行 CASE 测试以获取数值,并相应地调整 SUBSTR 偏移量和长度以拆分行和列组件,然后使用 LPAD () 用空格填充列到 3 个字符长度。

如果你可以扩展你的 MySQL,那么LIB_MYSQLUDF_PREG在 MySQL 中提供了额外的 PREG_CAPTURE 和 PREG_POSITION 函数,这将使这更容易;但是您需要从源代码重新编译 MySQL 才能做到这一点。MySQL 开发人员确实应该考虑将其作为标准实现。

在 PHP 中实际上要容易得多,因为您可以简单地以任何顺序检索记录,然后在 PHP 中使用 usort() 并使用以下方法处理那里的拆分:

list($c,$r) = sscanf($coord,'%[A-Z]%d');
$c = str_pad($c, 3, ' ', STR_PAD_LEFT);

拆分 row/col 并通过填充将 col 调整为可比较的字符串;但如果您正在处理大量数据,这可能会非常耗费内存。

我使用了一个以单元格地址为键的数组,并将值作为单元格值,所以:

function cellAddressCompare($a, $b)
{
    sscanf($a,'%[A-Z]%d', $ac, $ar);
    sscanf($b,'%[A-Z]%d', $bc, $br);

    if ($ar == $br) {
        return strcasecmp(strlen($ac) . $ac, strlen($bc) . $bc);
    }
    return ($ar < $br) ? -1 : 1;
}

uksort ($testArray, 'cellAddressCompare');
于 2013-06-02T12:05:25.533 回答
0

我建议使用这个库,它非常好,快速且易于使用:

http://faisalman.github.io/simple-excel-php/

把它放在一个循环中,从数据库中获取单元格的位置:

 use SimpleExcel\SimpleExcel;

 $excel = new SimpleExcel('CSV');
 $excel->loadFile('/home/faisalman/Downloads/test.csv', 'CSV')

 echo print_r($excel->getWorksheet(1)->getCell($mysql_Cpos, $mysql_Rpos));

如果您想使用 MySQL soley,您可以使用http://sourceforge.net/projects/phpexcelreader/之前将您的 excel 文件导入 mysql 数据库,如下所述:

http://major.io/2008/11/07/importing-excel-files-into-mysql-with-php/

那么你可以像往常一样处理它!

于 2013-06-02T11:46:11.220 回答