beyond compare解决特殊字符无法输出、多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本
beyond compare解决特殊字符无法输出、多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本
' XLS_to_CSV.vbs
'
' Converts an Excel workbook to a comma-separated text file. Requires Microsoft Excel.
' Usage:
' WScript XLS_to_CSV.vbs <input file> <output file> Option Explicit ' MsoAutomationSecurity
Const msoAutomationSecurityForceDisable =
' OpenTextFile iomode
Const ForReading =
Const ForAppending =
Const TristateTrue = -
' XlFileFormat
Const xlCSV = ' Comma-separated values
Const xlUnicodeText =
' XlSheetVisibility
Const xlSheetVisible = - Dim App, AutoSec, Doc, FileSys, AppProtect
Set FileSys = CreateObject("Scripting.FileSystemObject")
If FileSys.FileExists(WScript.Arguments()) Then
FileSys.DeleteFile WScript.Arguments()
End If
Set App = CreateObject("Excel.Application")
'Set AppProtect = CreateObject("Excel.Application") On Error Resume Next App.DisplayAlerts = False
AutoSec = App.AutomationSecurity
App.AutomationSecurity = msoAutomationSecurityForceDisable
Err.Clear Dim I, J, SheetName, TgtFile, TmpFile, TmpFilenames(), Content
Set Doc = App.Workbooks.Open(WScript.Arguments(), False, True)
If Err = Then
I =
For J = To Doc.Sheets.Count
If Doc.Sheets(J).Visible = xlSheetVisible Then
I = I +
End If
Next
ReDim TmpFilenames(I - )
Set TgtFile = FileSys.OpenTextFile(WScript.Arguments(), ForAppending, True, TristateTrue)
I =
For J = To Doc.Sheets.Count
If Doc.Sheets(J).Visible = xlSheetVisible Then
SheetName = Doc.Sheets(J).Name
TgtFile.WriteLine """SHEET " & SheetName & """"
Doc.Sheets(J).Activate
TmpFilenames(I) = FileSys.GetSpecialFolder() & "\" & FileSys.GetTempName
Doc.SaveAs TmpFilenames(I), xlUnicodeText
Set TmpFile = FileSys.OpenTextFile(TmpFilenames(I), ForReading, False, TristateTrue)
'Write 写整个文件的话,写失败会导致整个文件所有内容丢失,所以采用逐行方式。
'也可以防止文件太大内存不足问题
while not TmpFile.AtEndOfStream
TgtFile.WriteLine TmpFile.ReadLine
Wend
'TgtFile.Write TmpFile.ReadAll
TmpFile.Close
If I <> UBound(TmpFilenames) Then
TgtFile.WriteLine
End If
Doc.Sheets(J).Name = SheetName
I = I +
End If
Next
TgtFile.Close
Doc.Close False
End If App.AutomationSecurity = AutoSec
App.Quit
Set App = Nothing For I = To UBound(TmpFilenames)
If FileSys.FileExists(TmpFilenames(I)) Then
FileSys.DeleteFile TmpFilenames(I)
End If
Next WScript.Sleep() '这步操作为了将关闭失败的窗口暴露置到前台交给用户手工关,应该会被上面的On Error Resume Next捕捉忽略
App.Visible = true 'If AppProtect.Workbooks.Count = 0 Then
' '保护进程可不能随便退出,用户可能正在使用
' AppProtect.Quit
'End If
'AppProtect.Visible = true
'Set AppProtect = Nothing
' XLS_to_CSV.vbs'' Converts an Excel workbook to a comma-separated text file. Requires Microsoft Excel.' Usage:' WScript XLS_to_CSV.vbs <input file> <output file>
Option Explicit
' MsoAutomationSecurityConst msoAutomationSecurityForceDisable = 3' OpenTextFile iomodeConst ForReading = 1Const ForAppending = 8Const TristateTrue = -1 ' XlFileFormatConst xlCSV = 6 ' Comma-separated valuesConst xlUnicodeText = 42' XlSheetVisibilityConst xlSheetVisible = -1
Dim App, AutoSec, Doc, FileSys, AppProtectSet FileSys = CreateObject("Scripting.FileSystemObject")If FileSys.FileExists(WScript.Arguments(1)) ThenFileSys.DeleteFile WScript.Arguments(1)End IfSet App = CreateObject("Excel.Application")'Set AppProtect = CreateObject("Excel.Application")
On Error Resume Next
App.DisplayAlerts = FalseAutoSec = App.AutomationSecurityApp.AutomationSecurity = msoAutomationSecurityForceDisableErr.Clear
Dim I, J, SheetName, TgtFile, TmpFile, TmpFilenames(), ContentSet Doc = App.Workbooks.Open(WScript.Arguments(0), False, True)If Err = 0 ThenI = 0For J = 1 To Doc.Sheets.CountIf Doc.Sheets(J).Visible = xlSheetVisible ThenI = I + 1End IfNextReDim TmpFilenames(I - 1)Set TgtFile = FileSys.OpenTextFile(WScript.Arguments(1), ForAppending, True, TristateTrue)I = 0For J = 1 To Doc.Sheets.CountIf Doc.Sheets(J).Visible = xlSheetVisible ThenSheetName = Doc.Sheets(J).NameTgtFile.WriteLine """SHEET " & SheetName & """"Doc.Sheets(J).ActivateTmpFilenames(I) = FileSys.GetSpecialFolder(2) & "\" & FileSys.GetTempNameDoc.SaveAs TmpFilenames(I), xlUnicodeTextSet TmpFile = FileSys.OpenTextFile(TmpFilenames(I), ForReading, False, TristateTrue)'Write 写整个文件的话,写失败会导致整个文件所有内容丢失,所以采用逐行方式。'也可以防止文件太大内存不足问题while not TmpFile.AtEndOfStream TgtFile.WriteLine TmpFile.ReadLine Wend 'TgtFile.Write TmpFile.ReadAllTmpFile.CloseIf I <> UBound(TmpFilenames) ThenTgtFile.WriteLineEnd IfDoc.Sheets(J).Name = SheetNameI = I + 1End IfNextTgtFile.CloseDoc.Close FalseEnd If
App.AutomationSecurity = AutoSecApp.QuitSet App = Nothing
For I = 0 To UBound(TmpFilenames)If FileSys.FileExists(TmpFilenames(I)) ThenFileSys.DeleteFile TmpFilenames(I)End IfNext
WScript.Sleep(1000)
'这步操作为了将关闭失败的窗口暴露置到前台交给用户手工关,应该会被上面的On Error Resume Next捕捉忽略App.Visible = true
'If AppProtect.Workbooks.Count = 0 Then' '保护进程可不能随便退出,用户可能正在使用 ' AppProtect.Quit'End If'AppProtect.Visible = true'Set AppProtect = Nothing
beyond compare解决特殊字符无法输出、多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本的更多相关文章
- Mysql文件太大导入失败解决办法总结
Mysql文件太大导入失败解决办法总结 在使用phpmyadmin导入数据库的时候可能会碰到由于数据库文件太大而无法导入的问题! 英文提示如下:File exceeds the maximum all ...
- 解决asp.net上传文件时文件太大导致的错误
即使在web.config中添加了节点和设置依然是不行的,还是报文件太大的错误, <httpModules> <add name="UploadHttpModu ...
- 解决sql脚本文件太大无法打开的问题
as we known,sql数据库高版本向低版本还原是不太可能但是又经常会碰到的事,今天实测了一种方法 步骤:任务—>生成脚本—> 下一步->高级,选择数据库版本和编写脚本数据类型 ...
- SQL数据库从高版本到低版本的迁移,同时解决sql脚本文件太大无法打开的尴尬问题
as we known,sql数据库高版本向低版本还原是不太可能但是又经常会碰到的事,今天实测了一种方法 步骤:任务—>生成脚本—> 下一步->高级,选择数据库版本和编写脚本数据类型 ...
- sqlserver日志文件太大解决方法
SQL Server 的事务日志意外增大或充满的处理方法 事务日志文件Transaction Log File是用来记录数据库更新情况的文件,扩展名为ldf. 在 SQL Server 7.0 和 S ...
- 解决PHP下载文件时因时文件太大而报404错误
set_time_limit(0); ini_set('memory_limit', '512M'); header('Content-Type: application/octet-stream') ...
- Git远程推送文件太大的error解决
error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errfno 10054 方法1: 改成ssh推送 方法2: 把推送的缓 ...
- 微软BI 之SSIS 系列 - 通过 OLE DB 连接访问 Excel 2013 以及对不同 Sheet 页的数据处理
文章更新历史 2014年9月7日 - 加入了部分更新内容,在文章最后提到了关于不同 Office Excel 版本间的连接问题. 开篇介绍 这篇文章主要总结在 SSIS 中访问和处理 Excel 数据 ...
- EBS 多sheet页Excel动态报表开发过程
http://zhangzhongjie.iteye.com/blog/1779891 .前言本文讲述的多Sheet页EXCEL报表开发方式和开发HTML,PDF这类报表的方法大致是一致的,唯一不同的 ...
随机推荐
- git 命令行操作(之前整理在有道的笔记)
1. 常用命令 切换分支 git checkout [branch_name] 检出分支 git clone [git_URL] 更新分支 git pull origin [branch_name] ...
- PHP实现微信退款功能
最近在调微信退款接口,发现有许多坑,更大家分享一下 ① 要是在测试的时候,网页提示 curl 58 说明 证书的路径出现问题(这里要填物理路径,也就是绝对路径) ②网页提示curl 52 说明你的证书 ...
- Flask--配置文件
配置文件 配置文件的方式有很多,下面介绍两种: 第一种:根据全局变量实现 App.py from flask import Flask, session app = Flask(__name__) # ...
- mysql表的创建、查看、修改、删除
一.创建表 创建表前先使用use 数据库名进入某一个数据库,创建表语句的格式如下: create table 表名称 ( 列名1 列的数据类型 [约束], 列名2 列的数据类型 [约束], 列名2 列 ...
- 【Docker】docker安装redis
一.下载镜像并运行容器 1.指定redis.conf配置文件方式运行 docker run -p 6379:6379 --name myredis -v $PWD/conf/redis.conf:/e ...
- Oracle11g安装步骤(CentOS7)
安装环境:CentOS 7(64位) . oracle11G 的压缩包 第一步:创建相关目录,并将安装包放在指定路径下 [root@localhost data]# pwd/data[root@loc ...
- scrapy框架爬取开源中国项目大厅所有的发布项目。
本文爬取的字段,项目名称,发布时间,项目周期,应用领域,最低报价,最高报价,技术类型 1,items中定义爬取字段. import scrapy class KaiyuanzhongguoItem(s ...
- python使用 pdb 进行调试--- python -m pdb xxx.py 即可 和gdb使用一样
使用 pdb 进行调试 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变 ...
- tcp中设置连接超时
直接上代码: 设置连接超时 //首先改成非阻塞套接字 unsigned ; int rm=ioctl(sConnect,FIONBIO,(unsigned long*)&ul); ) { pr ...
- [Luogu 2386]放苹果
Description 题库链接 把 \(n\) 个同样的苹果放在 \(m\) 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发.多测,数据组数 \(t\). \(1\leq m,n\le ...