从c#中读取Excel文件中的数据

时间:2017-08-17 10:35:21

标签: c# excel

您好我有一个excel文件settings.xlsx。我想从这个文件中读取数据,并将我的代码中使用的变量与数据分配。

示例

             Column1   Column2
        Row1 Data        500
        Row2 Address     30
        Row3 Value       FPGA 

我的代码中数据,地址变量。 有人可以用c#的伪代码协助我打开一个文件并按照我的要求从中读取内容吗? 我想搜索"数据" excel文件中的单词,取下包含" Data"的单元格旁边的值。并将其分配给变量"数据"。我知道这很令人困惑,但我真的希望最终数据看起来像下面的内容。

Data=500 //Finally I want my variables to have the data as follows
        Address=30
        Value= FPGA  

我尝试在我的代码中打开一个文件。但由于我是c#的新手,我无法理解我的代码中出现了什么问题。 我被困在这一点上。打开功能会出错。请帮助我。我试图在我的c#代码中打开excel文件。但不知何故,它说开放函数重载方法没有一个参数。如何打开和阅读文件?

string Filepath = @Filename;
Excel.Application excelapp = new Excel.Application();
excelapp.Visible = true;
var MyBook = excelapp.Workbooks.Open(Filepath);

如果somone给出相同的伪代码将会非常有用。

您好, 我能够打开文件。

string Filepath = Path.Combine(Directory.GetCurrentDirectory(), Filename);
Excel.Application excelapp = new Excel.Application();
excelapp.Visible = true;
var Workbook = excelapp.Workbooks.Open(Filepath, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0,true,1, 0);

var xlWorkSheet =(Excel.Worksheet)Workbook.Worksheets.get_Item(2); Excel.Range range = xlWorkSheet.UsedRange;

但是当我尝试将单元格值存储在我的变量中时,它会给我一个错误。我不知何故不能使用Cells.value。我尝试使用以下但无法存储数据。有人可以帮忙吗?

uint pbaudRate2 = Convert.ToUInt32(range.Value2.ToString());

Why is cells.value not coming for me?

2 个答案:

答案 0 :(得分:0)

这是一个小型演示如何阅读一系列Excel单元格

    //  cf. http://support.microsoft.com/kb/302084/en-us
    Excel.Application XL = new Microsoft.Office.Interop.Excel.Application();
    Excel._Workbook WB = XL.Workbooks.Open(fileName, ReadOnly: true);
    Excel._Worksheet WS = (Excel._Worksheet)WB.Sheets[sheetName];
    Excel.Range R = WS.get_Range(GetAddress(row1, col1), GetAddress(row2, col2));
    object[,] arr = (object[,])R.Value;


    ....

    private string GetAddress(int rowNumber, int columnNumber)
    {
        int dividend = columnNumber;
        string columnName = String.Empty;
        int modulo;

        while (dividend > 0)
        {
            modulo = (dividend - 1) % 26;
            columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
            dividend = (int)((dividend - modulo) / 26);
        }

        return columnName + rowNumber;
    }

将单元格值复制到2D对象数组中。进一步处理取决于值类型。

请注意,数组的传输比单个单元格复制操作的嵌套循环快得多。

答案 1 :(得分:0)

如果您可以对excel文件进​​行细微更改,则可以更轻松地读取数据。您需要在第一行中包含列名称(任何名称都将执行,例如" ColumnName"," ColumnValue"),以及后续行中的数据。然后你可以使用这样的代码:

string xlConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=yourfullfilepathandname.xlsx;Extended Properties='Excel 8.0;HDR=Yes;';";
var xlConn = new OleDbConnection(xlConnStr);

var da = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", xlConn);
var xlDT = new DataTable();
da.Fill(xlDT);

您现在可以访问DataTable中的值。在你的情况下:xlDT.Rows [1] [1]将保存地址的值(在这种情况下为30)。需要注意的一点是:Excel电子表格中的数字需要检索为双精度数,然后在需要其他内容时进行投射:

int myAddress = (int)(double)xlDT.Rows[1][1];