Excel 如何使用批处理从csv文件中删除空行?
这是我第一次使用批处理文件编程,我被要求编写一个能够将.xlsm文件转换为.csv的程序,而不必打开Excel即可。为此,我使用以下.bat文件:Excel 如何使用批处理从csv文件中删除空行?,excel,csv,batch-file,vbscript,export-to-csv,Excel,Csv,Batch File,Vbscript,Export To Csv,这是我第一次使用批处理文件编程,我被要求编写一个能够将.xlsm文件转换为.csv的程序,而不必打开Excel即可。为此,我使用以下.bat文件: extoc.vbs integration.xlsm integration.csv Taskkill /IM EXCEL.EXE /F @echo off SETLOCAL ENABLEDELAYEDEXPANSION call :StripBlankLines "integration.csv" goto :eof :StripBlan
extoc.vbs integration.xlsm integration.csv
Taskkill /IM EXCEL.EXE /F
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
call :StripBlankLines "integration.csv"
goto :eof
:StripBlankLines
For %%x in ("%~1") do set OutF=integration_er.csv
if exist "%OutF%" del "%OutF%"
set FirstLine=1
for /F "usebackq delims=" %%B in (%*) do (
call :TrimWS %%B
if not "!Line!"=="" (
if "!FirstLine!"=="1" (
set FirstLine=0
) else (
>>"%OutF%" echo.
)
call :write !Line!
)
)
goto :eof
:TrimWS
set Line=%*
goto :eof
:write
>>"%OutF%"<NUL set /p Dummy=%*
goto :eof
我需要这样的东西:
data, data, data,, data, data, data, data, data, data
data, data, data,, data, data, data, data, data, data
data, data, data,, data, data, data, data, data, data
data, data, data,, data, data, data, data, data, data
我知道这些逗号来自Excel中的空白行,但是我不能使用VBA宏删除Excel中的所有空白行,因为它是一个巨大的表,而我的PC每次尝试时都会崩溃。所以,如果有办法通过VBS或批处理解决这个问题,我将非常高兴
:TrimWS
set Line=%*
set "line=%line:,=%"
if defined line set "line=%*"
goto :eof
将行中的每个,
替换为空。如果结果为空,则行
将未定义,即为空。如果没有,请使用原始值重新加载它
顺便说一句-如果您将FirstLine
设置为nothing(set FirstLine=“
)或某物(任何,只是不是nothing),那么您可以使用If defined FirstLine
检测其当前状态,这样您就不需要延迟扩展
(重写)
@echo关闭
SETLOCAL
调用:条带空白行“integration.csv”
后藤:eof
:带状空白线
对于%%x英寸(“%~1”)请设置outp=integration\u er.csv
如果存在“%outp%”删除“%outp%”
设置FirstLine=1
对于/F“usebackq delims=“%%B in(%*)do(
呼叫:TrimWS%%B
如果定义行(
如果定义为第一行(
设置“FirstLine=”
)否则(
>>“%outp%”回显。
)
呼叫:写入%%B
)
)
后藤:eof
:TrimWS
设置行=%*
设置“行=%line:,=%”
后藤:eof
:写
>>“%OutF%”
将行
中的每个,
替换为空。如果结果为空,则行
将未定义,即为空。如果未使用原始值重新加载
顺便说一句-如果您将FirstLine
设置为nothing(set FirstLine=“
)或某物(任何,只是不是nothing),那么您可以使用If defined FirstLine
检测其当前状态,这样您就不需要延迟扩展
(重写)
@echo关闭
SETLOCAL
调用:条带空白行“integration.csv”
后藤:eof
:带状空白线
对于%%x英寸(“%~1”)请设置outp=integration\u er.csv
如果存在“%outp%”删除“%outp%”
设置FirstLine=1
对于/F“usebackq delims=“%%B in(%*)do(
呼叫:TrimWS%%B
如果定义行(
如果定义为第一行(
设置“FirstLine=”
)否则(
>>“%outp%”回显。
)
呼叫:写入%%B
)
)
后藤:eof
:TrimWS
设置行=%*
设置“行=%line:,=%”
后藤:eof
:写
>>“%outp%”除非我有误解,为什么不只用一行:
FindStr“[^,]”“integration.csv”>“integration\u er.csv”
除非我有误解,为什么不只用一行:
FindStr“[^,]”“integration.csv”>“integration\u er.csv”
替换(,,,,,,,,,,,,&vbCrLf,”)
不起作用。不过还是要谢谢你,伙计<代码>替换(,,,,,,,,,,,“&vbCrLf,”)
?不起作用。不过还是要谢谢你,伙计!谢谢你,伙计!它在我的代码中工作得很好!另外,谢谢你的提示;)另外,如何调整代码以删除delayedexpansion?我得到了这部分代码online@PedroMartins你得解释一下什么是delayedexpansion
。@PedroMartins噢呜呜!我没有意识到延迟扩展是一个标准的批量操作。。。我的错!没问题,@Sancarn!谢谢你,伙计!它在我的代码中工作得很好!另外,谢谢你的提示;)另外,如何调整代码以删除delayedexpansion?我得到了这部分代码online@PedroMartins你得解释一下什么是delayedexpansion
。@PedroMartins噢呜呜!我没有意识到延迟扩展是一个标准的批量操作。。。我的错!没问题,@Sancarn!
data, data, data,, data, data, data, data, data, data
data, data, data,, data, data, data, data, data, data
data, data, data,, data, data, data, data, data, data
data, data, data,, data, data, data, data, data, data
:TrimWS
set Line=%*
set "line=%line:,=%"
if defined line set "line=%*"
goto :eof
@echo off
SETLOCAL
call :StripBlankLines "integration.csv"
goto :eof
:StripBlankLines
For %%x in ("%~1") do set OutF=integration_er.csv
if exist "%OutF%" del "%OutF%"
set FirstLine=1
for /F "usebackq delims=" %%B in (%*) do (
call :TrimWS %%B
if defined line (
if defined firstline (
set "FirstLine="
) else (
>>"%OutF%" echo.
)
call :write %%B
)
)
goto :eof
:TrimWS
set Line=%*
set "line=%line:,=%"
goto :eof
:write
>>"%OutF%"<NUL set /p Dummy=%*
goto :eof