You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Project 2019导出CSV非英文数据乱码问题求助

MS Project 2019导出CSV非英文乱码问题解决方法

问题说明

按照微软官方指引使用任务导出映射将MS Project 2019标准版文件保存为CSV时,无论是手动操作还是通过.NET插件调用MapEdit、FileSaveAs API,均出现非英文数据显示为“????????”的乱码问题。生成的CSV文件为ANSI编码,导出向导无法直接修改为UTF-8,调用代码如下:

Dim g_projAppObj As MSProject.Application

g_projAppObj.MapEdit(Name:="Task Export Map", Create:=True, OverwriteExisting:=True,
    DataCategory:=MSProject.PjDataCategories.pjMapTasks,
    FieldName:="Task_UID", ExternalFieldName:="Task_UID",
    CategoryEnabled:=True, TableName:="Task Export Map", ImportMethod:=0, HeaderRow:=True,
    AssignmentData:=False, TextDelimiter:=",",
    TextFileOrigin:=MSProject.PjTextFileOrigin.pjTextOriginUnicode,
    UseHtmlTemplate:=False, IncludeImage:=False)

g_projAppObj.FileSaveAs(Name:=w_FileName, Format:=MSProject.PjFileFormat.pjCSV, Map:="Task Export Map")

原因分析

MS Project的CSV导出机制存在局限性:即使在MapEdit中指定了pjTextOriginUnicode编码,当FileSaveAs选择pjCSV格式时,系统仍会强制使用ANSI编码保存文件,导致非ASCII字符(如中文、日文等)丢失或乱码。

解决方法

手动操作方案

  • 打开目标MS Project文件,选择【文件】→【另存为】,格式选择文本文件(制表符分隔)(*.txt),保存生成TXT文件
  • 用记事本打开该TXT文件,选择【文件】→【另存为】,在编码下拉框中选择UTF-8,将文件名后缀改为.csv后保存

代码实现方案(.NET插件)

放弃直接导出CSV,改为先导出Unicode编码的TXT文件,再转存为UTF-8编码的CSV,代码示例如下:

Imports System.IO
Imports System.Text
Imports MSProject

Dim g_projAppObj As MSProject.Application
Dim tempTxtPath As String = Path.ChangeExtension(w_FileName, ".txt")

' 配置任务导出映射
g_projAppObj.MapEdit(Name:="Task Export Map", Create:=True, OverwriteExisting:=True,
    DataCategory:=PjDataCategories.pjMapTasks,
    FieldName:="Task_UID", ExternalFieldName:="Task_UID",
    CategoryEnabled:=True, TableName:="Task Export Map", ImportMethod:=0, HeaderRow:=True,
    AssignmentData:=False, TextDelimiter:=",",
    TextFileOrigin:=PjTextFileOrigin.pjTextOriginUnicode,
    UseHtmlTemplate:=False, IncludeImage:=False)

' 导出为Unicode编码的TXT文件
g_projAppObj.FileSaveAs(Name:=tempTxtPath, Format:=PjFileFormat.pjText, Map:="Task Export Map")

' 将Unicode编码的TXT转存为UTF-8编码的CSV
Dim fileContent As String = File.ReadAllText(tempTxtPath, Encoding.Unicode)
File.WriteAllText(w_FileName, fileContent, Encoding.UTF8)

' 清理临时TXT文件
File.Delete(tempTxtPath)

注意事项

  • 确保导出映射中的TextDelimiter设置为逗号,保证TXT文件内容格式与CSV一致
  • 若任务数据包含逗号等特殊字符,需在映射中配置TextQualifier为引号(需在MapEdit中补充对应参数),避免CSV格式错乱

内容的提问来源于stack exchange,提问作者ømi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 23:58:19