Как я могу получить адрес ячейки xlsx, содержащей указанное значение? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть готовый словарь в c # и файл xlsx с заполненными столбцами. Мне нужно найти индексы столбца и строки, если ячейка содержит значение из словаря.

Я использую ExcelPackage и ExcelWorksheet. Словарь:

public static Dictionary<string, string> ExcelColumnsMapping = new Dictionary<string, string>()
{
    {"property name", "column name"}
}

XLS

var excelFile = new FileInfo(importFileFullPath);
 using (ExcelPackage package = new ExcelPackage(excelFile))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets[1];           
            }

И вот мне интересно, как я могу найти индексы ячеек с предоставленными данными. Я хотел бы видеть пример с любой строкой или чем-то. Спасибо за помощь!

1 Ответ

0 голосов
/ 28 августа 2018

Я не понял, что вы хотите сделать очень хорошо, но это метод, который ищет значение в файле xlsx и возвращает строку и столбец, если он найден.

using Excel = Microsoft.Office.Interop.Excel; //you should add the reference to that library for it to work

public Tuple<int, int> search(string Providedvalue)
{
    Excel.Application xlApp;
    Excel.Workbook xlWorkBook;
    Excel.Worksheet xlWorkSheet;
    Excel.Range range;

    string str;
    int rCnt;
    int cCnt;
    int rw = 0;
    int cl = 0;
    xlApp = new Excel.Application();
    xlWorkBook = xlApp.Workbooks.Open("path/exemple.xlsx", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

    range = xlWorkSheet.UsedRange;
    rw = range.Rows.Count;
    cl = range.Columns.Count;

    bool found = false;
    for (rCnt = 1; rCnt <= rw && found == false; rCnt++)
    {
            for (cCnt = 1; cCnt <= cl && found == false; cCnt++)
            {
                dynamic x = (range.Cells[rCnt, cCnt] as Excel.Range).Value2;
                str = x.ToString();
                if (Providedvalue == str)
                {
                    int line = rCnt;
                    int column = cCnt;
                    return new Tuple<int, int>(line, column);
                }
            }
    }
    return null;
}
...