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
相关产品推荐
相关产品推荐

