3

ファイルをアップロードして変更し、同じものを返す必要があります。ファイルを任意の場所に保存する必要はありませんが、操作して戻ります。ただし、ファイルを返す方法がわかりません。

以下のコードでは、ファイルを保存できます。ファイルを保存せずにコードを書きました。唯一の問題は、このファイルが他のユーザーによって既に開かれているというエラーが表示されることです。

別のプロセスで使用されているため、プロセスはファイル 'D:\Places\places\App_Data\877d36d3-ce29-48d1-995a-ea6652a528a7C2.xlsx' にアクセスできません。

手伝ってくれませんか

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult FileUpload(HttpPostedFileBase uploadFile)
{
    if (uploadFile.ContentLength > 0)
    {
        string path = string.Empty;
        var fileName = Path.GetFileName(uploadFile.FileName);
        path = Path.Combine(Server.MapPath("~/App_Data/"), Guid.NewGuid() + fileName);
        uploadFile.SaveAs(path);

        Excel.Application xlApp = new Excel.Application();
        Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(path);
        Excel._Worksheet xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1];
        Excel.Range xlRange = xlWorksheet.UsedRange;
        int rowCount = xlRange.Rows.Count; int colCount = xlRange.Columns.Count;
        (xlRange.Cells[4, 5] as Excel.Range).Value2 = "asdF";
        (xlRange.Cells[4, 6] as Excel.Range).Value2 = "asdF";
        (xlRange.Cells[4, 7] as Excel.Range).Value2 = "asdF";
        (xlRange.Cells[4, 8] as Excel.Range).Value2 = "asdF";

        releaseObject(xlWorksheet);
        releaseObject(xlWorkbook);
        releaseObject(xlApp);
        GC.Collect();

        uploadFile.InputStream.Dispose();
        return File(path, "application/text");

    }
    else
    {
        return View();
    }
}

private void releaseObject(object obj)
{
    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
        obj = null;
    }
    catch (Exception ex)
    {
        obj = null;
        //MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
    }
    finally
    {enter code here
        GC.Collect();
    }
}
4

2 に答える 2

3

アクションで FileStreamResult を返すことができます

return new FileStreamResult([memory stream], "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

戻る前に、ワークブックを閉じて一時領域に保存することもできます。エラーから、ファイルがまだ開いているように見えます。

于 2013-03-04T14:45:19.220 に答える
0

おそらく、ファイルを閉じていないためです。もう一度使用する前に xlWorkbook.Close などを使用するか、using() ステートメントを使用する必要があります。

http://msdn.microsoft.com/en-us/library/system.io.file.open(v=vs.71).aspx

于 2013-03-04T21:39:16.813 に答える