如何将REST API返回的CSV格式数据正确填充至Excel?
解决CSV数据填充Excel单元格或保存为标准CSV的方案
方案一:解析CSV并填充到Excel对应单元格
你的代码核心问题是直接把完整CSV字符串写入单个单元格,Excel不会自动解析CSV格式。需要先按CSV规则拆分数据,再逐行逐列写入单元格。
C#中可以用TextFieldParser(属于Microsoft.VisualBasic.FileIO命名空间)安全解析CSV,它能处理带引号、包含逗号的字段,避免简单split导致的错误。示例代码如下:
using Microsoft.VisualBasic.FileIO; using System.IO; if (statusResponse == "200201") { string finalResult = API_Helper.FeedData(FeedJobID, accessT); Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(); Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets[1]; // 读取CSV字符串并解析 using (StringReader sr = new StringReader(finalResult)) using (TextFieldParser parser = new TextFieldParser(sr)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true; // 兼容带引号的字段 int row = 1; while (!parser.EndOfData) { string[] fields = parser.ReadFields(); for (int col = 0; col < fields.Length; col++) { xlWorkSheet.Cells[row, col + 1] = fields[col]; } row++; } } // 保存并释放Excel资源,避免残留进程 xlWorkBook.SaveAs(@"C:\YourPath\output.xlsx"); xlWorkBook.Close(); xlApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); }
注意:需要添加对Microsoft.VisualBasic程序集的引用。
方案二:直接保存为标准CSV文件
如果不需要直接操作Excel对象,直接将API返回的CSV字符串保存为.csv文件是更高效的方式,Excel可直接识别并打开该文件。示例代码:
using System.IO; if (statusResponse == "200201") { string finalResult = API_Helper.FeedData(FeedJobID, accessT); // 用UTF-8带BOM编码保存,避免Excel打开时乱码 File.WriteAllText(@"C:\YourPath\output.csv", finalResult, System.Text.Encoding.UTF8); }
这种方式无需依赖Excel COM对象,性能更好,也不会出现残留进程的问题。
内容的提问来源于stack exchange,提问作者Pierre_CM
相关产品推荐
相关产品推荐

