如何在Excel电子表格上更改C#中的工作表名称

时间:2009-12-01 21:27:44

标签: c# excel

我有一个C#应用程序,我在数据库中从数据创建大量Excel文件。这部分工作正常。但是,我的用户询问是否可以修改工作表选项卡以反映数据库中的字段。这听起来很简单,但是,当我尝试重置名称时,它告诉我它是只读的,无法设置。我尝试过以下内容并没有奏效:

xlApp.Sheets[0].Range["A1"].Value = "NewTabName";

还试过:

xlApp.Name = "NewTabName";

我进行了谷歌搜索,看到了其他一些对我不起作用的方法。一些回复表明它是只读的,无法完成。

这似乎应该很简单。我怎么能这样做。

2 个答案:

答案 0 :(得分:22)

您需要访问实际工作表。尝试类似:

  Microsoft.Office.Interop.Excel.Worksheet worksheet = (Worksheet)xlApp.Worksheets["Sheet1"];
  worksheet.Name = “NewTabName”;

答案 1 :(得分:0)

这是我从现有代码复制的一个相当完整的示例。

使用 Office 365 中的 Excel 在 Windows 10 上完美运行

确保您添加对-的引用 Microsoft.Office.Interop.Excel

我的这个 DLL 的路径(可能因办公版本而异)- C:\WINDOWS\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll

// Add this at top of C# file -
using Excel = Microsoft.Office.Interop.Excel;

// In your class or function -
private static Excel.Application XlApp = null;
private static Excel.Workbook XlWorkbook = null;

// In your function -
XlApp = new Excel.ApplicationClass();

// Load workbook
XlWorkbook = XlApp.Workbooks.Open(@"Filename.xls",
    0, false, Type.Missing, "", "", true, Excel.XlPlatform.xlWindows,
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, true, Type.Missing,
    Type.Missing);

// Get reference to sheet
XlWorksheet = (Excel.Worksheet)XlWorkbook.Worksheets["Sheet1"];
                        
int numsheets = XlWorkbook.Sheets.Count;

// iterates through all sheets (1-n inclusive, not zero based)
for(int i=1;i<=numsheets;i++)
{
    Excel.Worksheet sht = (Excel.Worksheet)XlWorkbook.Worksheets[i];
    
    // Show sheet name
    Console.WriteLine(i+" "+sht.Name);
}

// To save with a same or different filename
XlWorkbook.SaveAs(@"Filename.xls",
    Excel.XlFileFormat.xlWorkbookNormal, "",
    "", false, false,
    Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,
    true, Type.Missing, Type.Missing, Type.Missing);

// Close Excel  
XlWorkbook.Close(true, Type.Missing, Type.Missing);
XlApp.Quit();

// Ensure you release resources
releaseObject(XlApp);
releaseObject(XlWorkbook);
releaseObject(XlWorksheet);

从上面调用的单独函数

private static void releaseObject(object obj)
{
  // try .. catch
  System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
}