0

我正在尝试将.csv文件从 Web 服务写入 ftp。当我在 Web 服务完成编写后下载文件时,Excel 在不同版本的 Excel 中反应不同。2013 完全可以正常打开文件,并且完全按照我想要的方式工作。但是 2003 有以下错误,当我打开文件时,所有内容都在 A 列中,而不是分布在 b、c、d 等中,逗号没有分隔。

在此处输入图像描述

这是 c# web 服务的代码

string delimiter = ",";

int length = filecontents.Count;
StringBuilder sb = new StringBuilder();

for (int index = 0; index < length; index++)
    sb.AppendLine(string.Join(delimiter, filecontents[index]));

string fileName = name;
string ftpAddress = "myaddress";
string username = "myusername";
string password = "mypassword";

string str = sb.ToString();
byte[] buffer = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, buffer, 0, buffer.Length);

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + ftpAddress + fileName);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(username, password);

Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);

reqStream.Close();

我试图设置request.ContentTypeapplication/CSV并且text/CSV都返回错误

“System.NotSupportedException:此类不支持此属性。↵ 在 System.Net.FtpWebRequest.set_ContentType(字符串值)”

任何想法将不胜感激

编辑:当\t用作分隔符(制表符)时,旧版本的 Excel 执行我想要的方式。但是,较新的版本则不会。所以我猜不同版本的 Excel 有不同的默认分隔符,关于如何强制它默认为逗号的任何想法?

4

2 回答 2

0

尝试将FtpWebRequest.UseBinary标志设置为true,这应该使文件保持完整。

同样对于此类问题的故障排除,您应该使用某种文件比较器(WinMerge 对文本文件很好)来查看问题是否与 Ftp 上传有关。如果文件已经证明是 100% 等于正在上传的文件,请从您的问题中删除任何与 Ftp 相关的信息,因为问题在于 Excel 如何处理您的文件。

于 2013-09-20T09:29:27.197 回答
0

所以我设法通过改变来解决我的问题:

byte[] buffer = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, buffer, 0, buffer.Length);

byte[] buffer = Encoding.UTF8.GetBytes(str);

我很抱歉无法向任何将其作为答案阅读的人很好地解释这一点,因为我自己并不完全理解它,但对我来说,它看起来好像字节的格式不正确。在查看 WinMerge 时(感谢 C.Evenhuis),每个字节后面都有两个 0,因此“ID”变成了“I00D00”。好吧,这就是它在 WinMerge 中出现的方式。

将单元格 A1 作为“ID”也遇到了问题,因为 excel 认为该文件是 SYLK 而不是 csv。将其更改为“Id”解决了这个问题。http://sharepointonline.wordpress.com/2011/08/09/excel-has-detected-that-c​​sv-is-a-sylk-file-but-cannot-load-it/

如果有人可以更好地解释这一点,请随时编辑我的答案,无论如何都要发布它,以防万一其他人像我一样被卡住。

于 2013-09-23T03:33:26.543 回答