如何通过使用 Excel Interop 添加新的 sheet 来覆盖现有的 Excel 文件 - C#

How to Overwrite existing Excel file by adding new sheet with Excel Interop - C#

我的程序每小时进行一些数学计算并将这些结果保存到 excel。当它第一次 运行(比如说 08:00 AM)时,它会创建一个 excel 工作簿和一个 sheet 即 "Sheet1"。它保存 excel 并释放 COM 对象。到目前为止一切都很好。

我的问题从第二个 运行(09:00 AM)开始。当它尝试保存新结果时,它会覆盖现有的 excel 文件(这没关系,这是我想要的方式)但它会覆盖在 08:00 AM 中创建的 Sheet1。我希望它在 Sheet2 中保存新结果。

在第三个 运行 中,我希望它在 Sheet3 中保存结果
在第四个 运行 中,我希望它将结果保存在 Sheet4 中。依此类推..

我怎样才能像上面那样更改我的代码? 提前致谢..

我的代码:

using excelApp = Microsoft.Office.Interop.Excel;

public static void Main(string[] arg)
    {
        while (true)
        {               
            writeToExcel();
            int wait = 3600 * 1000;
            System.Threading.Thread.Sleep(Convert.ToInt32(wait));
        }
    }
public static void writeToExcel()
    {
        excelApp.Application excl = new Microsoft.Office.Interop.Excel.Application();
        excl.Visible = true;

        //MATH CALCULATIONS...... 

        excelApp.Workbook wb = excl.Workbooks.Add(excelApp.XlWBATemplate.xlWBATWorksheet);
        excelApp.Worksheet ws1 = (excelApp.Worksheet)wb.Worksheets[1];
        excelApp.Worksheet ws2 = (excelApp.Worksheet)wb.Sheets.Add();
        excelApp.Worksheet ws3 = (excelApp.Worksheet)wb.Sheets.Add();
        excelApp.Worksheet ws4 = (excelApp.Worksheet)wb.Sheets.Add();
        excelApp.Worksheet ws5 = (excelApp.Worksheet)wb.Sheets.Add();
        excl.DisplayAlerts = false;
        string fileName = string.Format(@"{0}\Data_" + DateTime.Now.Month + "-" DateTime.Now.Day  + ".xlsx", Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
        workSheet.SaveAs(fileName);
        Console.WriteLine("Excel Saved Successfully!!");

        excl.Quit();

        // Release COM objects
        if (excl != null)                                       
        System.Runtime.InteropServices.Marshal.ReleaseComObject(excl);

        if (workSheet != null)                   
        System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);

        excl = null;
        workSheet = null;

        GC.Collect();
}

您需要从保存的文件中获取工作簿。因此,在您的例程开始时,您需要一种机制来确定今天的文件是否已经存在,如果存在,请使用以下方法获取您的工作簿。

        Workbook WB = ExcelApp.Workbooks.Open(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

希望这可以帮助您发现您的方式中的错误。