如何用VBA调用DeepL API从Excel选区生成合规术语表CSV
解决Excel VBA生成DeepL合规CSV术语表的400错误问题
问题背景
现有Excel VBA代码可生成符合要求的TSV格式DeepL术语表,但生成的CSV格式不符合DeepL规范,导致上传时返回400请求错误(参数缺失或无效)。DeepL的CSV规范明确要求:
- 仅用逗号分隔值
- 包含逗号/双引号的字段必须用双引号包裹
- 字段内的双引号需转义(用两个双引号表示)
- 仅CSV格式支持术语表上传
合规CSV生成的VBA代码实现
以下是完全符合DeepL规范的VBA代码,可直接替换原有代码:
Sub GenerateDeepLCompliantCSV() Dim ws As Worksheet Dim lastRow As Long, lastCol As Long Dim i As Long, j As Long Dim csvContent As String Dim cellValue As String ' 指定术语表所在工作表,自行修改名称 Set ws = ThisWorkbook.Worksheets("术语表") lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ' 遍历所有单元格生成CSV内容 For i = 1 To lastRow For j = 1 To lastCol cellValue = CStr(ws.Cells(i, j).Value) ' 转义字段内的双引号:单个双引号替换为两个双引号 cellValue = Replace(cellValue, """", """""") ' 当字段包含逗号或双引号时,用双引号包裹整个字段 If InStr(cellValue, ",") > 0 Or InStr(cellValue, """") > 0 Then cellValue = """" & cellValue & """" End If ' 拼接字段,最后一列不追加逗号 csvContent = csvContent & cellValue & IIf(j = lastCol, vbCrLf, ",") Next j Next i ' 保存CSV文件,自行修改保存路径 Open "C:\Users\YourName\Desktop\DeepL_Terms.csv" For Output As #1 Print #1, csvContent Close #1 MsgBox "合规CSV术语表已生成!", vbInformation End Sub
关键合规修正点
- 双引号转义:通过
Replace函数将字段内的单个双引号替换为两个双引号,完全符合CSV转义规则 - 字段自动包裹:判断字段是否包含逗号或双引号,自动添加双引号包裹,避免分隔符混乱
- 格式边界处理:最后一列末尾不添加逗号,使用
IIf函数简化换行逻辑,确保每行格式统一 - 换行规范:使用
vbCrLf生成Windows兼容的换行符,避免DeepL解析时出现格式错误
400错误额外排查项
若使用上述代码后仍出现400错误,需检查以下内容:
- 术语表列数:必须仅包含源语言术语和目标语言术语两列,不能有多余列
- 文件编码:确保CSV保存为UTF-8编码(可通过Excel另存为选择,或在VBA中指定UTF-8编码写入)
- API请求参数:上传时需指定正确的
name、source_lang、target_lang参数,且明确标识文件格式为csv
内容的提问来源于stack exchange,提问作者Guf
相关产品推荐
相关产品推荐

