[Phpmyadmin-git] [SCM] phpMyAdmin branch, master, updated. RELEASE_3_3_4-5348-g17fc137

Dieter Adriaenssens ruleant at users.sourceforge.net
Tue Jul 13 23:29:12 CEST 2010


The branch, master has been updated
       via  17fc1370f31ee8be51d5796e3e72252e96e4590e (commit)
       via  6648c620d917300bfddf6d90555976589844ec19 (commit)
       via  8b8562b435c81d72c02e38e1135d5fe0fa48d711 (commit)
       via  64a2832ac89bcb29f5e7e894cabc21d7a50870b0 (commit)
       via  ee0b2895ce966f62e26185ee92a8bf6e41f4fd41 (commit)
       via  b90a1b496b96d1058e152cb7d33bb13ee39ba66f (commit)
       via  798def6e4505ae239c4bd8c4a2754da534bc736e (commit)
      from  d7b824899783282fe59b7c541d3d88fb5e051738 (commit)


- Log -----------------------------------------------------------------
commit 17fc1370f31ee8be51d5796e3e72252e96e4590e
Merge: d7b824899783282fe59b7c541d3d88fb5e051738 6648c620d917300bfddf6d90555976589844ec19
Author: Dieter Adriaenssens <ruleant at users.sourceforge.net>
Date:   Tue Jul 13 23:27:15 2010 +0200

    Merge branch 'QA_3_3'
    
    Conflicts:
    
    	ChangeLog
    	libraries/import.lib.php

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                |    1 +
 libraries/import.lib.php |   29 ++++++++++++++++++++++-------
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8a25731..07c9a76 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -101,6 +101,7 @@ master, todo: update PHP excel?)
 - bug #3023507 [core] No result set display from stored procedure SELECT
 - bug [export] CSV for MS Excel (Windows) should have semi-colon as separator
 - [core] Update library PHPExcel to version 1.7.3c
+- bug #2994885 [import] Convert Excel column name correctly
 
 3.3.4.0 (2010-06-28)
 - bug #2996161 [import] properly escape import value
diff --git a/libraries/import.lib.php b/libraries/import.lib.php
index e012287..cd8741c 100644
--- a/libraries/import.lib.php
+++ b/libraries/import.lib.php
@@ -343,27 +343,42 @@ function PMA_getColumnAlphaName($num)
 
 /**
  * Returns the column number based on the Excel name.
- * So "A" = 1, "AZ" = 27, etc.
+ * So "A" = 1, "Z" = 26, "AA" = 27, etc.
  *
+ * Basicly this is a base26 (A-Z) to base10 (0-9) conversion.
+ * It iterates through all characters in the column name and
+ * calculates the corresponding value, based on character value
+ * (A = 1, ..., Z = 26) and position in the string.
  *
  * @access  public
  *
  * @uses    strtoupper()
  * @uses    strlen()
- * @uses    count()
  * @uses    ord()
  * @param   string $name (i.e. "A", or "BC", etc.)
  * @return  int The column number
  */
 function PMA_getColumnNumberFromName($name) {
-    if (strlen($name) != 0) {
+    if (!empty($name)) {
         $name = strtoupper($name);
-        $num_chars = count($name);
-        $number = 0;
+        $num_chars = strlen($name);
+        $column_number = 0;
         for ($i = 0; $i < $num_chars; ++$i) {
-            $number += (ord($name[$i]) - 64);
+		// read string from back to front
+		$char_pos = ($num_chars - 1) - $i;
+
+		// convert capital character to ASCII value
+		// and subtract 64 to get corresponding decimal value
+		// ASCII value of "A" is 65, "B" is 66, etc.
+		// Decimal equivalent of "A" is 1, "B" is 2, etc.
+		$number = (ord($name[$char_pos]) - 64);
+
+		// base26 to base10 conversion : multiply each number
+		// with corresponding value of the position, in this case
+		// $i=0 : 1; $i=1 : 26; $i=2 : 676; ...
+		$column_number += $number * pow(26,$i);
         }
-        return $number;
+        return $column_number;
     } else {
         return 0;
     }


hooks/post-receive
-- 
phpMyAdmin




More information about the Git mailing list