【问题标题】:Loading tsv/csv file in excel sheet在 Excel 工作表中加载 tsv/csv 文件
【发布时间】:2017-07-05 10:47:30
【问题描述】:

这是我的代码。

    public static string LoadPackage(DirectoryInfo outputDir, string name)
    {
        FileInfo newFile = new FileInfo(outputDir.FullName + @"\test.xlsx");
        if (newFile.Exists)
        {
            newFile.Delete();
            newFile = new FileInfo(outputDir.FullName + @"\test.xlsx");
        }

        var format = new ExcelTextFormat();
        format.Delimiter = '\t';
        format.SkipLinesBeginning = 1;

        using (ExcelPackage package = new ExcelPackage())
        {
            LoadSheet(package, outputDir, name);

            package.SaveAs(newFile);

        }
        return newFile.FullName;
    }

然后我调用 LoadSheet 方法以从 tsv 文件填充我的 excel 文件。

    public static void LoadSheet(ExcelPackage package, DirectoryInfo 
    outputDir, string name)
    {

        var ws = package.Workbook.Worksheets.Add("Content");

        var format = new ExcelTextFormat();
        format.Delimiter = '\t';
        format.SkipLinesBeginning = 2;
        format.SkipLinesEnd = 1;

        var range = ws.Cells["A1"].LoadFromText(new 
        FileInfo(outputDir.FullName + "\\" + name), format, 
        TableStyles.Medium27, false);
    }

这是我的按钮点击事件代码

        if (BrowseFileUpload.HasFile)
        {
            var name = BrowseFileUpload.PostedFile.FileName;
            InputTextBox.Text = name;
            LoadData.LoadPackage(new 
            System.IO.DirectoryInfo("C:\\Users\\Nemanja\\Downloads"), name);

            InfoLabel.Text = "Your data has been imported!!!";
            InfoLabel.ForeColor = System.Drawing.Color.Blue;
            InfoLabel.Font.Size = 20;
        }

一切正常,我创建了新的 excel 文件,将其保存,但它不加载我需要它加载到 excel 文件中的数据。它只是一个空文件,或者我收到错误文件已损坏恢复你可以的。

有人能根据我的解释和这段代码找出可能是什么问题吗?谢谢你们所有的好人。

【问题讨论】:

  • 调试你的代码了吗?在调用LoadText 之后,range 是否包含任何内容?源数据是什么样的?
  • @PanagiotisKanavos 我只是调试它并且范围是空的,它显示在调试 nullException 中。

标签: c# excel csv epplus


【解决方案1】:

我认为问题很可能出在源数据的格式上。我根据您的代码整理了以下示例,它运行良好。

var outFile = Path.ChangeExtension(filePath, ".xlsx");
using (var p = new ExcelPackage())
{
    var fmt = new ExcelTextFormat();
    fmt.Delimiter = '\t';
    fmt.SkipLinesBeginning = 2;
    fmt.SkipLinesEnd = 1;
    fmt.EOL = ((char)10).ToString();   // THIS LINE FIXED THE PROBLEM (UNIX NEWLINE) 

    var ws = p.Workbook.Worksheets.Add("Imported Text");
    ws.Cells[1, 1].LoadFromText(new FileInfo(filePath), fmt, TableStyles.Medium27, false);
    p.SaveAs(new FileInfo(outFile));
}

尝试通过它运行您的数据,看看您是否遇到同样的问题。

更新

问题是文件中有一个 unix 样式的换行符 - EPPlus 默认需要一个 windows 样式的换行符

【讨论】:

  • 我刚刚对其进行了测试,但它仍然给了我空白纸。 LoadFromText 没有返回任何值。
  • 那么,源数据有问题。您将什么源数据用于换行符?尝试将以下内容添加到您的 ExcelTextFormat 定义中: fmt.EOL = ((char)10).ToString();
  • 我添加了该定义,它解决了我的问题。非常感谢。
  • 啊,UNIX 与 Windows 新行的乐趣……很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多