请问电子表格文件的后缀是 :xlsx 吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问电子表格文件的后缀是 :xlsx 吗?相关的知识,希望对你有一定的参考价值。

参考技术A 不知道你用的是哪个软件
Office2007前的版本:
excel的后缀默认的是xls,word的后缀默认的是doc
Office2007:
excel的后缀默认的是xlsx,word的后缀默认的是docx
其实,你将文档另存为,在对话框中的保存类型中就可看到它们分别还有哪些后缀名
还有WPS的后缀是
XLS
参考技术B xlsx是Office2007版本以上
excel电子表格使用的,是用新的基于XML的压缩文件格式取代了其目前专有的默认xls文件格式,在传统的文件名扩展名后面添加了字母x(即:docx取代doc、.xlsx取代xls等等),使其占用空间更小。
参考技术C 1.
电子表格文件的后缀是
:xlsx或xls。
2.
Microsoft
Excel是微软公司的办公软件Microsoft
office的组件之一,是由Microsoft为Windows和Apple
Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel
是微软办公套装软件的一个重要的组成部分,它可以进行各种数据的处理、统计分析和辅助决策操作,广泛地应用于管理、统计财经、金融等众多领域。

yii2 Excel电子表格(xlsx格式)文件上传验证

关键位置: vendor/yiisoft/validators/FileValidator.php

    protected function validateExtension($file)
    {
        $extension = mb_strtolower($file->extension, 'UTF-8');

        if ($this->checkExtensionByMimeType) {
            $mimeType = FileHelper::getMimeType($file->tempName, null, false);
            if ($mimeType === null) {
                return false;
            }

            $extensionsByMimeType = FileHelper::getExtensionsByMimeType($mimeType);

            if (!in_array($extension, $extensionsByMimeType, true)) {
                return false;
            }
        }

        if (!empty($this->extensions)) {
            foreach ((array) $this->extensions as $ext) {
                if ($extension === $ext || StringHelper::endsWith($file->name, ".$ext", false)) {
                    return true;
                }
            }
            return false;
        }

        return true;
    }

以上代码验证扩展名的流程是:得到上传的文件的(表面)扩展名 $extension,如果允许根据MIME类型检测扩展名,根据已经上传的临时文件获得它的MIME类型 $mimeType,根据 $mimeType 反向去获取可能的后缀 $extensionsByMimeType,如果上传文件的(表面)扩展名的确不在其内,验证失败(即认为那个文件只是伪造了后缀名来作为某种文件),反之,再进一步查验(表面)扩展名是否在模型配置中设定的允许扩展名之内(未配置则略过这一步)。

WPS电子表格文件,xlsx格式,上传后,根据文件推导的MIME类型为:

application/octet-stream

而 Microsoft Office Home and Student 2019 中 Excel 的电子表格文件, xlsx格式,上传后为:

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Excel建立的文件,用WPS打开,另存为 xlsx 后,就变成 WPS 的 MIME 了。而 LibreOffice 电子表格另存为xlsx后,MIME 是 Excel 一致的。

另外一个 xlsx 文件,不清楚是用什么软件或哪个版本生成的,得到的 MIME 为

application/zip

微软自己的软件对 Excel xlsx电子表格的 MIME 描述最准确,因为它是从文档格式来说的,后面那个不知名软件搞出来的则完全把xlsx文件理解成 用zip压缩的一堆xml文件,这个范围就大了一点了,因为 Office 文件后缀最后带 x 的都是zip压缩的一堆xml文件,而WPS最笼统,直接成了二进制流文件,太多文件是这个东西了。

yii2 根据后缀推导 MIME 类型,内部主要使用 PHP 的 finfo_open 函数,如果要去找一个能够识别 WPS的 magic file,再重新去覆盖写一个 FileValidator,工程量太大。所以,我们采用简单的变通办法:

后端不检查后缀名,但检查 MIME 类型,检查后缀名的工作交给前端完成。

    /**
     * @var UploadedFile
     */
    public $excelFile;

    public function rules()
    {
        return [
            [['excelFile'], 'file', 'skipOnEmpty' => false, 'mimeTypes' => [
                'application/octet-stream',
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                'application/zip',
            ]],
        ];
    }

以上是关于请问电子表格文件的后缀是 :xlsx 吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 打开 Excel 电子表格 (.xlsx)

怎么样用电子表格打开后缀为.shp的文件啊

将 Excel XML 电子表格转换为 xlsx

yii2 Excel电子表格(xlsx格式)文件上传验证

为啥我的电子表格以 .xlsx 扩展名保存,但在我将其更改为 .xls 之前不会发生?

r 写一个简单的xlsx数据电子表格