Excel 如何使用批处理从csv文件中删除空行?

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

这是我第一次使用批处理文件编程,我被要求编写一个能够将.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
: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