C# 需要在读取Excel文件之前打开并保存该文件

C# 需要在读取Excel文件之前打开并保存该文件,c#,asp.net-mvc,excel,epplus,C#,Asp.net Mvc,Excel,Epplus,我有一个方法,就是创建一个Excelsheet。创建文件时,我需要先将其打开并手动保存在Excel中,然后才能使用Excel Data Reader读取。如果我打开并保存完全相同的文件而不做任何更改,我可以像不想让它工作一样阅读它。有人知道我如何做到: a) 创建文件时是否正确保存(使用EPPlus) 或 b) 打开已创建的文件,并在尝试读取之前使用C#正确保存它 我的创建方法: public void CreateAnnuityExcelSheet(List<Calculation>

我有一个方法,就是创建一个Excelsheet。创建文件时,我需要先将其打开并手动保存在Excel中,然后才能使用Excel Data Reader读取。如果我打开并保存完全相同的文件而不做任何更改,我可以像不想让它工作一样阅读它。有人知道我如何做到:

a) 创建文件时是否正确保存(使用EPPlus)

b) 打开已创建的文件,并在尝试读取之前使用C#正确保存它

我的创建方法:

public void CreateAnnuityExcelSheet(List<Calculation> cList, FormCollection form, int DTCyear)
{
    string fileName = "test";
    string path = @"C:\ExcelFiles\" + fileName + ".xlsx"; //Path for the file
    FileInfo info = new FileInfo(path);
    info.Directory.Create(); //If C:\ExcelFiles does not exist, create it
    if (!info.Exists)
    {
        using (ExcelPackage package = new ExcelPackage(info))
        {
            ExcelWorksheet ws = package.Workbook.Worksheets.Add(fileName);

            //Filling the worksheet with values here...

            package.SaveAs(info);
        }
    }
}

这得到了完全相同的结果。我仍然需要手动打开并保存文件。

使用package.SaveAs(info)代替package.save()。您已经使用新的ExcelPackage(info)打开了该文件。我猜您必须手动打开和保存的原因是excel文档标记创建不正确。您是指用公式填充单元格的代码吗?不完全是。帮你自己一个忙,用excel创建并保存一个空的excel文件。右键单击它,用记事本打开。你会明白我在说什么。使excel文件成为excel文件的元数据很可能未写入该文件。在任何情况下,您是否尝试过package.Save()而不是package.SaveAs(info)?是的,我尝试过。同样的结果。我会在notepadHello Krillezz中查看。你曾经解决过这个问题吗?
[HttpPost]
public ActionResult ShowExcelFile(GetExcel model)
{
    List<Calculation> cList = new List<Calculation>();
    DataSet result = null;
    var file = model.Files[0];
    if (file != null && file.ContentLength > 0)
    {
        // .xlsx
        IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(file.InputStream);

        reader.IsFirstRowAsColumnNames = true;
        result = reader.AsDataSet();
        reader.Close();

        var PV = Convert.ToDecimal(data.Table.Rows[1][6]); //Works fine if the file is opened and saved in Excel. Else null..
        //Work with the dataset here. When the file is not opened and saved it gets null everywhere. Else it works fine
    }
    return View("ShowExcelFile", model);
}
byte[] data = package.GetAsByteArray();
System.IO.File.WriteAllBytes(path, data);