【问题标题】:C# VS2005 Convert Pipe Delimited .TXT to Excel Workbook .XLSC# VS2005 将管道分隔的 .TXT 转换为 Excel 工作簿 .XLS
【发布时间】:2011-11-08 13:54:01
【问题描述】:

我正在使用 VS2005 C# 并尝试将管道分隔的文本文件转换为 excel 工作簿格式。以下是我的代码:

public partial class TextToExcel : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void SaveAsExcelBtn_Click(object sender, EventArgs e)
    {

        string xlExtension = ".csv";
        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('Failed to import. Cause: Invalid text file.');</script>");
                return;
            }




            // Generate the file name to save the text file. 
            //string strUploadFileName = "C:/Documents and Settings/rhlim/My Documents/Visual Studio 2005/WebSites/SoD/UploadFiles/" + DateTime.Now.ToString("yyyyMMddHHmmss") + strExtension;

            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();
            }


            //string strExcelOutputFilename = "C:/Documents and Settings/rhlim/My Documents/" + DateTime.Now.ToString("yyyyMMddHHmmss")+xlExtension;
            // Save the Excel spreadsheet on server. 
            //TextFile.SaveAs (strExcelOutputFilename);


        }
        else Response.Write("<script>alert('Failed to import. Cause: No file found');</script>");
    }
}

目前我遇到了一些文件保存错误

有什么建议吗?非常感谢!

【问题讨论】:

  • 你有管道分隔文本文件的例子吗?
  • @Polity 我已经上传了txt文件和excel输出
  • 你没有转换你只是用 xls 扩展保存。

标签: c# visual-studio excel visual-studio-2005


【解决方案1】:

这是因为 Excel 不支持管道,您必须将其转换为逗号或半列,例如:

using (StreamWriter outputWriter = new StreamWriter(File.Create(strExcelOutputFilename)))
{
    StreamReader inputReader = new StreamReader(TextFile.FileContent);
    string fileContent = inputReader.ReadToEnd();

    fileContent = fileContent.Replace('|', ',');
    outputWriter.Write(fileContent);
}

【讨论】:

  • 将管道更改为逗号后,我可以直接使用输出转换为 .xls 吗?我如何保存这个的输出文件?
  • 在我的代码示例中,我都将管道转换为半列,并将其保存到输出文件中。注意这些行:new StreamWriter(File.Create(strExcelOutputFilename)) 和 outputWriter.Write(fileContent);
  • 我把你的代码放在我的方法中,但它说 system.web.ui.webcontrols.fileupload 不包含输入流的定义。我不知道我还能把你的代码放在哪里,因为 strExcelOutputFile 周边只能在我的上传方法中检索
  • @RUiHAO - 更新了我的代码以使用 FileContent 而不是 InputStream,现在它应该可以工作了
  • 我已经更新了我的代码以包含你的streamwriter,我可以看到fileContent 是逗号而不是管道。但是,下一步我应该如何转换为按列排列的 excel 文件?我试过只更改文件扩展名,但它仍然不起作用。谢谢
【解决方案2】:

我在 Google 上搜索过,希望对您有所帮助:http://csharp.net-informations.com/excel/csharp-create-excel.htm

或者,已经回答:Create Excel (.XLS and .XLSX) file from C#

在第一个链接中,xlWorkSheet.Cell[x,y] 行将元素放入专用单元格中。

仅供参考,xlsx 格式(Office 2007 中的新格式)将为您提供强大的代码操作能力。

【讨论】:

    【解决方案3】:

    对于生成和操作 excel 文件,我个人更喜欢 NPOI 库。从 Codeplex 下载它,将 NPOI dll 的引用添加到您的项目中。将您想要的“模板”excel文件存储在已知位置,并使用您需要的任何列标题/格式。然后,您只需使用 npoi 制作模板文件的副本并在工作表/行/列级别对其进行操作,并放置您想要的任何数据。

    示例代码 sn-p 看起来像这样。假设您已将输入拆分为字符串列表

    const string ExcelTemplateFile = "~/Resources/ExcelInputTemplate.xls";
    const string ExcelWorksheetName = "Output Worksheet";
    const int RequiredColumn = 1;
    
    private HSSFWorkbook CreateExcelWorkbook(IEnumerable<String> inputData)
    {
            FileStream fs = new FileStream(Server.MapPath(ExcelTemplateFile), FileMode.Open, FileAccess.Read);
    
            // Getting the complete workbook...
            HSSFWorkbook templateWorkbook = new HSSFWorkbook(fs, true);
    
            // Getting the worksheet by its name...
            HSSFSheet sheet = templateWorkbook.GetSheet(ExcelWorksheetName);
    
            int startRowIterator = 1;
    
            foreach (string currentData in inputData)
            {
                sheet.CreateRow(startRowIterator).CreateCell(RequiredColumn).SetCellValue(currentData);
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多