如何通过使用 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);
希望这可以帮助您发现您的方式中的错误。
我的程序每小时进行一些数学计算并将这些结果保存到 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);
希望这可以帮助您发现您的方式中的错误。