我正在使用VS2005 C#,我正在尝试将Excel文件表导入SQL服务器数据库。
目前我正在尝试直接将竖线分隔的文本文件转换为.XLS格式。
但是我找不到办法,所以我尝试将管道分隔的文本文件转换为.CSV。
但最后,在转换完成后,我意识到某些变量之间存在一些默认的commans,导致行被弄乱。
有人知道无论如何忽略变量中的默认commans,或使用另一个变量而不是commans?以下是我的转换功能的代码:
protected void SaveAsExcelBtn_Click(object sender, EventArgs e)
{
//string strExcelOutputFilename = "C:/Documents and Settings/rhlim/My Documents/" + DateTime.Now.ToString("yyyyMMddHHmmss") + xlExtension;
// Before attempting to import the file, verify
// that the FileUpload control contains a file.
if (TextFile.HasFile)
{
// Get the name of the Excel spreadsheet.
string strFileName = Server.HtmlEncode(TextFile.FileName);
// Get the extension of the text.
string strExtension = Path.GetExtension(strFileName);
// Validate the file extension.
if (strExtension != ".TXT" && strExtension!=".txt")
{
Response.Write("<script>alert('Invalid text file!');</script>");
return;
}
if (DEMUserRoleRB.Checked)
{
string strExcelOutputFilename = "C:/" + "userrolelist" + xlExtension;
using (StreamWriter outputWriter = new StreamWriter(File.Create(strExcelOutputFilename)))
{
StreamReader inputReader = new StreamReader(TextFile.FileContent);
string fileContent = inputReader.ReadToEnd();
fileContent = fileContent.Replace('|', ',');
outputWriter.Write(fileContent);
//TextFile.SaveAs(strExcelOutputFilename);
inputReader.Close();
UploadStatusLabel.Text = "Conversion successful. File is stored at directory C:/";
}
}
}
else Response.Write("<script>alert('Please select a file');</script>");
}
谢谢
答案 0 :(得分:1)
您需要逐行处理文件 - 尝试
while ( inputReader.Peek() >= 0 )
{
string[] myInputFields = inputReader.ReadLine().Split ( new char[] { '|' } );
List<string> myOutputFields = new List<string>();
foreach (string aField in myInputFields)
{
string oField = aField;
if ( oField.Contains ( ",") )
oField = "\"" + oField + "\"";
myOutputFields.Add (oField);
}
outputWriter.WriteLine ( string.Join ( ",", myOutputFields.ToArray() ) );
};
这从输入文件中取一行,并在它找到的每个管道|
处将其拆分为“字段”...然后它构建一个新行,,
作为分隔符并包含任何字段在过程中已经包含,
并带有双引号"
的内容...
MSDN参考:
编辑 - 根据评论:
上面的代码替换了原始代码中的以下3行:
string fileContent = inputReader.ReadToEnd();
fileContent = fileContent.Replace('|', ',');
outputWriter.Write(fileContent);