AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1748448
Accepted
Lorien
Lorien
Asked: 2022-10-20 23:26:35 +0800 CST2022-10-20 23:26:35 +0800 CST 2022-10-20 23:26:35 +0800 CST

批量修复 Excel 97-2003 错误“格式与扩展名不匹配”

  • 772

语境

我收到了大约 1700 个 97-2003 excel 文件,其中包含大量数据,包括一些文本信息。在清理并运行一些统计分析之前,我试图将它们全部读入 Stata。但是,Stata 无法打开它们。这些文件具有 .xls 格式,其中包含我想要保留的大量文本,并将它们转换为 .csv 文件(因此是 csv 标记)。

我试过的

  • 仔细一看,每次我在 Excel 中手动打开文件时,都会出现错误“格式与扩展名不匹配”,我必须单击“仍然打开”并手动保存,然后才能将文件导入 Stata。我不可能对 1700 个文件执行此操作。我使用的是 Windows 操作系统,所有文件都本地保存在我的驱动器上。

我还尝试在 stata 上编写大量代码,以将所有文件保存为 csv 或至少一个可以导入 stata 的 xls,但我的运气为零。每次我尝试保存它们时,我都会收到一个损坏的 csv 或一个带有完全相同的错误的 xls,当我手动尝试打开文件时,在 stata 上弹出“尝试 xlCreateBook()”和“格式与扩展名不匹配”错误.

作为参考,下面是我写的stata代码。

cd "$dropbox\project8\data\2008-2009\A.Monthwise\dakota"
local oldfiles : dir "." files "*.xls" , respectcase
mac list _oldfiles

foreach fn of local oldfiles {
  local oldfn `"`fn'"'
  local res = ustrregexm(`"`oldfn'"', "_(.*)\.xls", .)
  if `res'==1 {
    local newfn = "new_" + ustrregexs(1) + ".dta"
    di `"Renaming `oldfn' to `newfn'"'
    copy `"./`oldfn'"' `"./new/`newfn'"', public
     }
} 

问题

有没有办法可以解决 1700 个文件的扩展/格式问题并批量转换所有内容,以便 Stata 可以读取它?

microsoft-excel csv
  • 2 2 个回答
  • 915 Views

2 个回答

  • Voted
  1. Best Answer
    harrymc
    2022-10-21T00:49:42+08:002022-10-21T00:49:42+08:00

    错误“格式与扩展名不匹配”意味着文件不是真正的.xls. 由于 Excel 仍然可以打开它们,它们可能是受支持的另一种格式。我的猜测是.xlsx。

    您可以使用十六进制编辑器(例如 HxD)来检查文件签名,它位于前几个字节中:

    • xlsx: 前 4 个字节是50 4B 03 04

    • xls: 前 8 个字节是D0 CF 11 E0 A1 B1 1A E1

    要一次重命名当前文件夹中的所有文件,您可以使用命令提示符 (CMD) 和以下命令:

    ren *.xls *.xlsx
    

    如果您的文件签名不是上述之一,请将其添加到您的帖子中。它将有助于识别这些文件。


    由于文件是 HTML,而不是 xsl 甚至 xslx,因此可以使用 VBA 在 Excel 中进行批量转换。

    文章 如何在 Excel 中将多个 xls 文件转换为 xlsx 文件? 包含适用于海报的此脚本:

    Sub ConvertToXlsx()
    'Updateby Extendoffice
    Dim strPath As String
    Dim strFile As String
    Dim xWbk As Workbook
    Dim xSFD, xRFD As FileDialog
    Dim xSPath As String
    Dim xRPath As String
    Set xSFD = Application.FileDialog(msoFileDialogFolderPicker)
    With xSFD
    .Title = "Please select the folder contains the xls files:"
    .InitialFileName = "C:\"
    End With
    If xSFD.Show <> -1 Then Exit Sub
    xSPath = xSFD.SelectedItems.Item(1)
    Set xRFD = Application.FileDialog(msoFileDialogFolderPicker)
    With xRFD
    .Title = "Please select a folder for outputting the new files:"
    .InitialFileName = "C:\"
    End With
    If xRFD.Show <> -1 Then Exit Sub
    xRPath = xRFD.SelectedItems.Item(1) & "\"
    strPath = xSPath & "\"
    strFile = Dir(strPath & "*.xls")
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Do While strFile <> ""
    If Right(strFile, 3) = "xls" Then
    Set xWbk = Workbooks.Open(Filename:=strPath & strFile)
    xWbk.SaveAs Filename:=xRPath & strFile & "x", _
    FileFormat:=xlOpenXMLWorkbook
    xWbk.Close SaveChanges:=False
    End If
    strFile = Dir
    Loop
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub
    
    • 15
  2. Saaru Lindestøkke
    2022-10-21T03:51:52+08:002022-10-21T03:51:52+08:00

    由于这些文件似乎是 HTML 文件(在我看来是一种存储数据的狂野方式),您可以研究可以抓取/解析网页的方法。

    斯塔塔

    我没有可玩的 Stata,但发现该readhtml软件包具有readhtmltable似乎可以读取网页上的表格的功能(不确定它是否可以处理本地 HTML 文件)。

    Python

    或者,我确实可以访问 Python 和pandas,它有一个read_html方法。我用你上传的文件F - A & N Islands_September.xls试了一下,效果很好。

    为此,您需要在 python 环境中使用lxml和包。pandas

    import pandas as pd 
    # This reads in the 'xls' file (which is actually HTML)
    df = pd.read_html(r"c:\path\to\F - A & N Islands_September.xls")
    # The result is a list with length one, so get the actual DataFrame with
    df = df[0]
    # Show the first few rows:
    df.head()
    
                      Unnamed: 0_level_0 Unnamed: 1_level_0                                                   Unnamed: 2_level_0 Unnamed: 3_level_0       District                                               
                      Unnamed: 0_level_1 Unnamed: 1_level_1                                                   Unnamed: 2_level_1 Unnamed: 3_level_1 _A & N Islands Nicobar North and Middle Andaman South Andaman
    0  M1 [Ante Natal Care Services ANC]                1.1                    Total number of pregnant women Registered for ANC              TOTAL            NaN     NaN                      NaN           NaN
    1  M1 [Ante Natal Care Services ANC]              1.1.1  Of which Number registered within first trimester (within 12 weeks)              TOTAL            NaN     NaN                      NaN           NaN
    2  M1 [Ante Natal Care Services ANC]                1.2                        Number of Pregnant women registered under JSY              TOTAL            NaN     NaN                      NaN           NaN
    3  M1 [Ante Natal Care Services ANC]                1.3   Number of pregnant women received 3 ANC check ups during pregnancy              TOTAL            NaN     NaN                      NaN           NaN
    4  M1 [Ante Natal Care Services ANC]              1.4.1          Number of pregnant women given TT1 during current pregnancy              TOTAL            NaN     NaN                      NaN           NaN
    

    要将文件批量转换为 CSV,您可以执行以下操作:

    from pathlib import Path
    import pandas as pd
    
    # Assuming your 'XLS' files are in subfolder data next to your python script
    data = Path(r"./data")
    data.mkdir(parents=True, exist_ok=True)
    results = Path(r"./results")
    results.mkdir(parents=True, exist_ok=True)
    
    # Loop over all XLS files
    for f in data.glob("*.xls"):
        outfile = results / f.with_suffix('.csv').name
        df = pd.read_html(f)[0]
        df.to_csv(outfile, index=False)
    
    • 7

相关问题

  • 带有“和”运算符的 Excel 数据透视表

  • 如何对整列使用 Excel 的 LENGTH 函数?

  • Excel 数组(2 个变量)

  • 如何从 WSL 打开 office 文件

  • VBA根据文件名重命名工作表

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve