C# 在excel工作表中加载tsv/csv文件

C# 在excel工作表中加载tsv/csv文件,c#,excel,csv,epplus,C#,Excel,Csv,Epplus,这是我的密码 public static string LoadPackage(DirectoryInfo outputDir, string name) { FileInfo newFile = new FileInfo(outputDir.FullName + @"\test.xlsx"); if (newFile.Exists) { newFile.Delete(); newFi

这是我的密码

    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文件中的数据。这只是一个空文件,否则我会收到一个错误文件已损坏,请恢复您可以恢复的内容


有人能根据我的解释和代码找出什么是问题吗。谢谢大家。

我认为问题很可能出在源数据的格式上。我根据您的代码编写了以下示例,效果很好

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样式的换行符

我认为问题可能与源数据的格式有关。我根据您的代码编写了以下示例,效果很好

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样式的换行符

您调试代码了吗?调用
LoadText
后,
range
是否包含任何内容?源数据看起来像什么?@PanagiotisKanavos我刚刚调试了它,范围为空,它显示在调试nullException中。您调试了代码吗?调用
LoadText
后,
range
是否包含任何内容?源数据看起来像什么?@PanagiotisKanavos我刚刚调试了它,范围为空,它显示在调试nullException中。我刚刚测试了它,它仍然给我空表。LoadFromText未返回任何值。因此,源数据存在问题。换行符的源数据使用什么?尝试将以下内容添加到ExcelTextFormat定义中:fmt.EOL=((char)10).ToString();我添加了这个定义,它解决了我的问题。非常感谢。啊,UNIX vs Windows新品的乐趣。。。很高兴能帮上忙!我刚测试过它,它仍然给我空表。LoadFromText未返回任何值。因此,源数据存在问题。换行符的源数据使用什么?尝试将以下内容添加到ExcelTextFormat定义中:fmt.EOL=((char)10).ToString();我添加了这个定义,它解决了我的问题。非常感谢。啊,UNIX vs Windows新品的乐趣。。。很高兴能帮上忙!