不使用phpExcel将大型xlsx文件转换为csv

不使用phpExcel将大型xlsx文件转换为csv,php,excel,csv,excel-vba,Php,Excel,Csv,Excel Vba,我有一个很大的xlsx文件,它是90MB使用它提供给我的phpexcel Warning: simplexml_load_string(): Memory allocation failed : growing buffer 我尝试使用所有记录的方法加载该文件,并更改了php.inimemory\u limit=-1 我正在尝试将xlsx文件转换为csv文件,以便轻松加载 有没有办法在不使用phpexcel的情况下将xlsx文件转换为csv?在线转换器,最大文件大小为100MB: 3路指南:

我有一个很大的xlsx文件,它是
90MB
使用它提供给我的
phpexcel

Warning: simplexml_load_string(): Memory allocation failed : growing buffer
我尝试使用所有记录的方法加载该文件,并更改了php.ini
memory\u limit=-1

我正在尝试将xlsx文件转换为csv文件,以便轻松加载


有没有办法在不使用phpexcel的情况下将xlsx文件转换为csv?

在线转换器,最大文件大小为100MB:

3路指南:

希望这有助于…

您可以使用:

你可以这样做;使用以下命令,您将扫描A1->A10并导出当前工作簿“数据”选项卡的前5列

Sub exportCSV()
变暗范围作为范围
将cpSheet设置为工作表
将myPath设置为字符串,将myFileName设置为字符串
Dim fn作为“整数”文件号
Dim cLine作为字符串“要写入文件的当前行”
'创建输出文件:
myPath=“C:\local\”
myFileName=“out.csv”
fn=自由文件
打开附加为#fn的myPath和myFileName
Set wkRange=thishworkbook.Sheets(“数据”).Range($A1:$A10)
对于WK范围内的每个c
'使用“偏移量”选择列'
cLine=c.Offset(0,0)。值&“
cLine=cLine&c.Offset(0,1)。值&“
cLine=cLine&c.Offset(0,2).值&“
cLine=cLine&c.Offset(0,3).值&“
倾斜=倾斜和c.偏移(0,4).值
打印#fn,cLine
下一个
关闭#fn
MsgBox“完成!”
端接头

XLSX文件是压缩的zip文件。如果解压缩XLSX文件,请查看文件夹xl/worksheets,其中包含文件每张页的xml文件

您可能希望首先提取这些XML文件,然后逐个元素解析(XML)内容,这样获取每个XML元素的缓冲区就不需要太大。通过这种方式,您可以使用php编写自己的脚本来读取提取的文件,或者使用一些xml解析器将工作表转换为xml对象,并将它们转储到csv中

生成的xml的结构类似于此示例(重要信息在sheetData中):


并获取值(v标记)的内容。

它的巨大文件,您可以使用Office Excel本身将文件另存为csv,如果它只有一个文件我要编写脚本来加载此文件并将其放入mysql数据库。90MB太多了,您可以将此文件拆分为多个部分,这样您就可以使用PHPExcel,您可以尝试放置ini\u集(“max\u execution\u time”,0);在编写任何代码之前,请不要忘记在完成导入后删除。如果我拆分了,那么是否有可能丢失数据?我对python一无所知。您能告诉我如何使用php吗?是否有任何编程方式转换xlsx文件?如何在不打开Excel的情况下运行DBA脚本?(这是vba,不是DBA脚本);你可以搜索,发现它不太可能:>这不是我想象中最好的答案,但至少这提供了一些通过逐行阅读来解决问题的提示。在我的情况下,解析为XML内容是不可能的,因为即使我的计算机中的所有RAM都不足以打开文件,所以使用PHP读取为字符串,然后解析是不可能的。可以有一种混合方法:通过char读取查找sheetdata的开头,然后通过读取解析一行元素,直到它到达末尾。我知道有一些JavaXML解析器可以一次读取一个标记,所以我认为可能也有一些PHP的模拟解析器。
wb = xlrd.open_workbook(os.path.join(filepath, 'result.xls'))
sheet = wb.sheet_by_index(0)
fp = open(os.path.join(filepath, 'result.csv'), 'wb')
wr = csv.writer(fp, quoting=csv.QUOTE_ALL)
for rownum in xrange(sheet.nrows):
  wr.writerow([unicode(val).encode('utf8') for val in sheet.row_values(rownum)])
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
    <dimension ref="A1:J42"/>
    <sheetViews>
        <sheetView workbookViewId="0">
            <selection activeCell="C7" sqref="C7"/>
        </sheetView>
    </sheetViews>
    <sheetFormatPr defaultRowHeight="12.75" x14ac:dyDescent="0.2"/>
    <cols>
        <col min="1" max="1" width="18.140625" style="1" customWidth="1"/>
        <col min="2" max="16384" width="9.140625" style="1"/>
    </cols>
    <sheetData>
        <row r="1" spans="1:10" x14ac:dyDescent="0.2">
            <c r="B1" s="1" t="s"><v>0</v></c>
            <c r="C1" s="1" t="s"><v>1</v></c>
            <c r="D1" s="1" t="s"><v>2</v></c>
        </row>
        <row r="2" spans="1:10" x14ac:dyDescent="0.2">
            <c r="A2" s="1" t="s"><v>4</v></c><c r="B2" s="1"><v>200</v></c>
            <c r="C2" s="1"><v>200</v></c>
            <c r="D2" s="1"><v>100</v></c><c r="E2" s="1"><v>200</v></c>
        </row>
        <row r="3" spans="1:10" x14ac:dyDescent="0.2">
            <c r="A3" s="1" t="s"><v>10</v></c><c r="C3" s="1"><f>6*125</f><v>750</v></c>
            <c r="H3" s="1" t="s"><v>6</v></c><c r="I3" s="1"><v>130</v></c>
        </row>
    </sheetData>
    <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
    <pageSetup paperSize="0" orientation="portrait" horizontalDpi="0" verticalDpi="0" copies="0"/>
</worksheet>
worksheet.sheetData.row[i].c[j].v