在MySQL中导入Excel工作表的奇怪问题

我有一个奇怪的问题,导入.xlsx文件到MySQL数据库使用PHP脚本。

excel文件是从另一个oracle数据库服务器生成的,正在被复制到我的服务器上。 脚本没有插入任何logging,除非我手动

  1. 打开文件,
  2. 保存它,并
  3. closures它。

这很奇怪,因为我没有对文件做任何改变,根本没有改变。 在保存文件之前和之后,我已经比较了文件权限,没有任何更改。

对于Excel文件,我在当前的服务器上创build工作正常,没有任何麻烦。

数据库文件

// Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } else{ echo "Connection Made Succesfully !!!"; } ?> 

代码示例

 <?php include 'db.php'; if (isset($_FILES['file'])) { IF($_POST["TotalCol"] && $_POST["TableName"]) { require_once "simplexlsx.class.php"; $xlsx = new SimpleXLSX( $_FILES['file']['tmp_name'] ); list($cols, $rows) = $xlsx->dimension(); foreach( $xlsx->rows() as $k => $r) { // loop through excel worksheet $sub = mysql_escape_string($r[0]); for ($x = 1; $x < $_POST["TotalCol"]; $x++) { $sub .= "','".mysql_escape_string($r[$x]); } //$sub = mysql_escape_string($r[0])."','" . mysql_escape_string($r[1]); //$q = "insert into test2 value('" . mysql_escape_string($r[0])."','" . mysql_escape_string($r[1])."','" . mysql_escape_string($r[2]) . "');"; $q = "insert into ".$_POST["TableName"]." value('" . $sub . "');" if ($conn->query($q) === TRUE) { echo "New record created successfully"; } else { echo "<br>// Error: " . $sql . "<br>" . $conn->error . "<br>"; } } // IF ENDS HERE } } ?> <h1>Upload</h1> <form method="post" enctype="multipart/form-data"> *.XLSX <input type="file" name="file" /></br><input type="Text" name="TableName" class="TableName" placeholder="TableName" /></br><input type="Text" name="TotalCol" class="TotalCol" placeholder="Total Columns" />&nbsp;&nbsp;<input type="submit" value="Insert" /> </form> 

而我从这里使用simplexlsx.class.php类

我猜,问题的发生是因为我们没有在Oracle服务器上安装MS Office / Excel,从那里生成Excel文件。

xlsx文件可以将其单元格数据存储在“内联string”或“共享string”中(我从内存中调出这些术语)。 有些图书馆只承担一个而不是另一个,Excel可能会在打开,保存和closures时“修复”这个文件,实际上,这样做确实很糟糕。 我不熟悉这个PHP库,但我强烈怀疑这是相关的。 – Michael – 12小时前的sqlbot

因此,在执行此脚本之前,我正在configuration一个bot脚本(使用AutoIT)来打开所有的excel文件并保存它们。

如果有人知道更好的解决方法,那么请提及它。 谢谢。