首页 > 解决方案 > C#从excel标题第一行存储命名范围

问题描述

我是使用 excel 的 C# 新手。我有一个 excel 文件,需要遍历每一列的第一行并将该列的值存储为该列地址的 excel 命名范围。到目前为止,我有以下内容:

var fileinfo = new FileInfo(path);
        if (fileinfo.Exists)
        {
            using (ExcelPackage p = new ExcelPackage(fileinfo))
            {
                var worksheet = p.Workbook.Worksheets[1];

                int iRowCnt = worksheet.Dimension.End.Row;
                int iColCnt = worksheet.Dimension.End.Column;

                for (int i=1; i <= iColCnt; i++ )
                {

                }

            }
        }

注意每列值是我想在excel中存储为命名范围的标题

标签: c#excel

解决方案


我假设您使用的是 epplus 包。这是我用来将 Excel 文档转换为数据表的代码。

public static DataTable LoadFromStreamExcel(String _path, bool _has_header)
{
    DataTable _datatable = new DataTable();
    var fileinfo = new FileInfo(_path);
    using (ExcelPackage pack = new ExcelPackage(fileinfo))
    {
        ExcelWorksheet ws = pack.Workbook.Worksheets.First();
        foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
        {
            _datatable.Columns.Add(_has_header ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
        }
        var startRow = _has_header ? 2 : 1;
        for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
        {
            var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
            DataRow row = _datatable.Rows.Add();
            foreach (var cell in wsRow)
            {
                row[cell.Start.Column - 1] = cell.Value;
            }
        }
    }
    return _datatable;
}

推荐阅读