C# 使用c在Excel中生成动态生成的范围名称#

C# 使用c在Excel中生成动态生成的范围名称#,c#,excel,vsto,C#,Excel,Vsto,在同一工作表上生成多个未知大小的表的最佳方法是什么?值将从oracle数据库中提取,并用作多个表上的值。是否可以创建动态命名范围,或者是否需要其他方法?我有一些c#方面的经验,但无法访问VSTO 2005 如有任何帮助或建议,将不胜感激 如果有人要求,我愿意进一步解释这个问题。您可以存储正在使用的最低单元格块的当前值,并不断向下添加表格,或者像Mike Rosenblum所说的那样,在同一工作簿中创建多张工作表会使文档不那么臃肿。如果我误解了你的问题,请告诉我 创建应命名的范围对象 为其name

在同一工作表上生成多个未知大小的表的最佳方法是什么?值将从oracle数据库中提取,并用作多个表上的值。是否可以创建动态命名范围,或者是否需要其他方法?我有一些c#方面的经验,但无法访问VSTO 2005

如有任何帮助或建议,将不胜感激


如果有人要求,我愿意进一步解释这个问题。

您可以存储正在使用的最低单元格块的当前值,并不断向下添加表格,或者像Mike Rosenblum所说的那样,在同一工作簿中创建多张工作表会使文档不那么臃肿。如果我误解了你的问题,请告诉我

  • 创建应命名的范围对象
  • 为其name属性指定一个名称
  • 为Value2属性指定值或值[,]

    object[,] values = { { 111, 222, 333 }, { 444, 555, 666 }, { 101, 202, 303 }, 
                         { 404, 505, 606 }, { 111, 222, 333 }, { 444, 555, 666 },
                         { 101, 202, 303 }, { 404, 505, 606 } };
    
    Application excel = new Application();
    Workbook workbook = excel.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
    Worksheet sheet = (Worksheet)workbook.Worksheets[1];
    
    int rows = values.GetUpperBound(0) - values.GetLowerBound(0) + 1;
    int cols = values.GetUpperBound(1) - values.GetLowerBound(1) + 1;
    
    // assign a name to an area of cells and fill it with values
    Range dest = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[rows, cols]);
    dest.Name = "SORUCE_RANGE";
    dest.Value2 = values;
    
    // assign a name to a single cell
    dest = (Range) sheet.Cells[5, 7];
    dest.Name = "MY_DESTINATION";
    dest.NumberFormatLocal = "TT.MM.JJJJ hh:mm:ss"; //german format syntax
    dest.Value2 = DateTime.Now;
    
    // clean up (best in finally block)
    workbook.Close(false, null, null);
    excel.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
    

  • 我希望有帮助

    不知道您的需求,似乎您希望为每个表使用一个列表或表格。将列表视为存储在工作表中的一个小数据库表。您可以参考列表的范围,可以添加记录、删除记录、插入其他列,等等

    您可以为每个表定义一个列表,生成数据,然后将该数据插入列表

    列表管理–数据/列表/创建 列表或Ctrl+L将列表工具应用于 Excel中的列表。列表范围已标记 带有可调整大小的蓝色边框。 功能包括自动筛选标题, 插入行和总计行。列表可以是 导入/导出为XML和 SharePoint来源


    您可以在Excel 2007中的表格或Excel 2003中的列表中找到VBA代码示例,网址为

    打开一个空白的Excel文件,将结果制作成您想要的示例,并将其保存在XML中。 将该文件用作生成XML的基础/模板

    优点:

    • 它不需要在机器上安装Excel来生成XML
    • 它不会创建Excel对象的实例
    • 它不调用Excel COM对象(通常很昂贵)
    缺点:

    • 我不知道是否可以创建多个工作表:)

    在ASP.NET中,您可以构建它,并可以在标题中将内容类型声明为application/vnd.ms-excel。这样大多数浏览器都会理解这是一个Excel查找,并尝试使用Excel打开。

    是的,您应该进一步解释。不,你根本不需要VSTO,所以不用担心。你应该在每张工作表上放一张桌子,否则你必须非常小心,不要让它们干扰。我认为不需要“动态命名范围”,用Excel的说法,它通常是一种工作表公式。您可以随意命名单元格和区域,但这些只是别名。您可以将范围“A1:C3”命名为“MyRange”,然后在公式中使用它,但这在使用代码时很少有价值。我想你需要更多地解释你想做什么。。。。。。如果你能让我们更好地了解全局,那么有人会更好地帮助你。“你可以将范围“A1:C3”命名为“MyRange”,然后在公式中使用它,但这在使用代码时很少有价值。”你在开玩笑吗。针对Excel最有价值的编程技术之一是“命名范围”。@AMissico:你说得100%对,我不知道我在想什么。我的原始注释已经有将近5年的历史了,距离我必须纠正它太远了:命名范围在工作表公式和代码中都非常有价值。在代码中更是如此,以防止行/列的插入或删除更改范围引用的含义。我向Matey或任何被我最初的回答弄糊涂的人道歉。但是,对于一个表,会自动为您创建一个命名范围,它也会为您动态调整大小。如果可能的话,我一定会尝试在每个工作表中只保留一个表。下一个最好的方法是从左到右排列它们——不要把一张桌子放在另一张桌子下面,除非你确定它们永远不需要调整大小。(如果可能需要添加列,甚至要注意从左到右的排列。)同样,如果可能的话,表和透视表最好是每个工作表一个。