如何在我的Visual Studio Office Excel工作簿中访问工作表中的数据?

时间:2015-03-17 12:35:30

标签: c# vsto excel-2010

我需要使用C#代码创建“文档级自定义”(而不是Excel加载项!)

我创建了一个Visual Studio Office Excel 2010工作簿项目类型。这将在我的项目中创建一个包含3张工作簿的工作簿。我在其中一张表中添加了一些“配置”信息。

我需要以编程方式访问此配置信息(Sheet1包含button - 按下该按钮

  1. 加载配置数据
  2. 打开WinForm
  3. 显示该表单上的配置数据
  4. 但不知怎的,我找不到怎么做......

    如果我尝试初始化Sheet1类,编译器需要两个参数 - Microsoft.Office.Tools.Excel.FactoryIServiceProvider,但我从一个放在Sheet2上的按钮调用它 - 所以它是 之后> Excel工作簿已经打开...不应该自动初始化Sheet1吗?

    那么,如何从我的VSTO项目的c#代码中访问Sheet1

    修改

    Please see project sample screencast here

    我在Sheet2上有一个按钮,应该

    1. 从Sheet1
    2. 加载一些数据
    3. 初始化WinForm
    4. 将其添加为WinForm上的ComboBox的数据源
    5. 我找不到如何从Sheet1中读取数据的方法......

1 个答案:

答案 0 :(得分:3)

似乎没有很多开发人员(至少在stackoverflow)可以使用Visual Studio / VSTO中的Excel工作簿),但这仍然是我如何使这些基本工作 - 如果这有用的话给别人

由于我的代码在Worksheet的* .cs文件中,我发现我可以这样访问项目的xlsx文件:

var excel = (Excel.Application)this.Application;
var xlbook = (Excel.Workbook)excel.ActiveWorkbook; 

var worksheets = xlbook.Worksheets;
var sheet = (Excel.Worksheet)worksheets["Sheet3"];
int row = 2;//1st row for column titles

while (!string.IsNullOrEmpty(((Excel.Range)sheet.Cells[row, 2]).Value))
{
    var weight = ((Excel.Range)sheet.Cells[row, 3]).Value;
    row++;
}

关于从c#代码中的Excel工作表处理数据的一些额外的事情,我发现(也许这对某人有帮助):

  1. Excel Cell的.NET类型是Excel.Range(至少我没有 找到任何其他选择)
  2. 当读取Excel文件中为空的单元格时,它在.NET端的值为null,而不是“”
  3. 在Excel端似乎是字符串的值 - 在c#端加载时可以变为不同的类型。我不知道这是不是最好的方式,但我解决了这个问题:
  4. var weight =(((Excel.Range)sheet.Cells [row,3])。Value);

    if (weight is double)
    {
        product.Weight = ((double)((Excel.Range)sheet.Cells[row, 3]).Value).ToString();
    }
    else if (weight is string)
    {
        product.Weight = ((Excel.Range)sheet.Cells[row, 3]).Value;
    }