在阅读之前需要打开并保存Excel文件

时间:2014-04-09 09:50:34

标签: c# asp.net-mvc excel epplus

我有一个方法,我创建一个Excel表格。创建文件后,我需要打开它并将其手动保存在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);
        }
    }
}

我的阅读方法:

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

我也尝试过使用WriteAllBytes而不是使用package.SaveAs():

byte[] data = package.GetAsByteArray();
System.IO.File.WriteAllBytes(path, data);

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

0 个答案:

没有答案