Ken Guru Ответов: 1

C# получить отформатированное значение ячейки excel как показано на рисунке


Привет,

у меня большая проблема.

Лист содержит в одном столбце следующие значения и форматы:

5678 с форматом '00000', в результате чего отображается 05678
06789 с форматом "стандарт", в результате чего отображается 06789

Теперь, когда я обрабатываю лист для первой ячейки с помощью

string cellContent = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)ExcelWorksheet.Cells[r,c]).Value);

Я получаю 5678

string cellContent = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)ExcelWorksheet.Cells[r,c]).Value2);

Я получаю 5678

string cellContent = Convert.ToString(((Microsoft.Office.Interop.Excel.Range)ExcelWorksheet.Cells[r,c]).Text);

Я получаю 5678

В каждом случае я получаю базовые значения, а не отображаемые значения.

Мой вопрос заключается в том, как мне получить отформатированное (отображаемое) значение из ячейки?

Спасибо

Кругозор

Что я уже пробовал:

Читайте и пробуйте много об этом, но безуспешно.

Richard Deeming

То Диапазон.Свойство text[^] должны вернуться "форматированный текст для указанного объекта"- а это звучит именно так, как ты хочешь.

1 Ответов

Рейтинг:
2

Garth J Lancaster

Цитата:
Мой вопрос заключается в том, как мне получить отформатированное (отображаемое) значение из ячейки?

Ну, похоже, что у вас есть какое - то форматирование, применяемое на глобальном уровне/уровне листа, или уровне столбца, или отдельных ячеек-вы, кажется, указываете на это из-за
Цитата:
с форматом '00000'
но я не уверен, как настроен "стандартный" формат

Таким образом, подход 1 будет заключаться в том, чтобы иметь возможность считывать и декодировать информацию о формате из электронной таблицы и применять тот же формат к вашему C# string cellContent, независимо от того, является ли это "локальным" или "стандартным" параметром формата/ это обсуждение *может* ymmv помочь вам в этом отношении c# - Как узнать форматирование ячейки Excel - переполнение стека[^]

Подход 2 будет выглядеть так: "я не могу получить/интерпретировать данные форматирования из Excel", поэтому я буду обрабатывать их локально в C#

Оба подхода заканчиваются одинаково, в том смысле (в том случае, который вы показали), что это

cellContent.PadLeft(5, '0')

В программном обеспечении часто бывает так, что значение - число или дата хранится в way/value, но то, что мы видим, - это применяемая директива "форматирования" - даты являются классикой, они так редко хранятся в виде набора символов (например, "2020/07/04"), в отличие от того, чтобы храниться в числовой форме, что облегчает их сравнение и вычисление.