Interop excel формат ячеек

I am building a report using the microsoft.interop.excel library in C#.

I have something like this:

 Range rangeTarget;
 .
 .
 .
 rangeTarget = worksheet.get_Range("C" + row, "N" + row);

I want the range to display its values as whole numbers i.e. with no decimal places.
I’ve tried rangeTarge.AutoFormat, but have no idea how to use it.

Any Ideas ?

Thanks.

asked Sep 13, 2011 at 12:38

Jonny's user avatar

2

I don’t know what the other formats are but you can look on the MSDN.

Excel.Range ThisRange = ThisSheet.get_Range("A:A",system.type.missing);
ThisRange.NumberFormat = "0.00%";
ThisRange.NumberFormat = "General";    
ThisRange.NumberFormat = "hh:mm:ss";
ThisRange.NumberFormat = "DD/MM/YYYY";

Marshal.FinalReleaseComObject(ThisRange);

answered Sep 13, 2011 at 13:56

TMB's user avatar

TMBTMB

4,6834 gold badges25 silver badges44 bronze badges

1

see MSDN

Microsoft.Office.Tools.Excel.NamedRange namedRange1 =
this.Controls.AddNamedRange(this.Range["A1", "A5"], "namedRange1");

namedRange1.NoteText("This is a Formatting test", missing, missing);
namedRange1.Value2 = "Martha";
namedRange1.Font.Name = "Verdana";
namedRange1.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
namedRange1.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
namedRange1.BorderAround(missing, Excel.XlBorderWeight.xlThick,
    Excel.XlColorIndex.xlColorIndexAutomatic, missing);
namedRange1.AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormat3DEffects1,
    true, false, true, false, true, true);

if (MessageBox.Show("Clear the formatting and notes?", "Test",
    MessageBoxButtons.YesNo) == DialogResult.Yes)
{
    namedRange1.ClearFormats();
    namedRange1.ClearNotes();
}

answered Sep 13, 2011 at 13:34

TMB's user avatar

TMBTMB

4,6834 gold badges25 silver badges44 bronze badges

1

Оставляю заметку по работе с Excel с помощью C#.

Привожу фрагменты кода, которые искал когда-то сам для работы с Excel документами.

Наработки очень пригодились в работе для формирования отчетности.

Прежде всего нужно подключить библиотеку Microsoft.Office.Interop.Excel.

Подключение Microsoft.Office.Interop.Excel

Visual Studio здесь довольно старой версии. Если у вас версия новая, отличаться будет только вид окна.

Далее создаем псевдоним для работы с Excel:

using Excel = Microsoft.Office.Interop.Excel;

//Объявляем приложение
Excel.Application ex = new Microsoft.Office.Interop.Excel.Application();

//Отобразить Excel
ex.Visible = true;

//Количество листов в рабочей книге
ex.SheetsInNewWorkbook = 2;

//Добавить рабочую книгу
Excel.Workbook workBook = ex.Workbooks.Add(Type.Missing);

//Отключить отображение окон с сообщениями
ex.DisplayAlerts = false;                                       

//Получаем первый лист документа (счет начинается с 1)
Excel.Worksheet sheet = (Excel.Worksheet)ex.Worksheets.get_Item(1);

//Название листа (вкладки снизу)
sheet.Name = "Отчет за 13.12.2017";

//Пример заполнения ячеек
for (int i = 1; i <= 9; i++)
{
  for (int j = 1; j < 9; j++)
  sheet.Cells[i, j] = String.Format("Boom {0} {1}", i, j);
}

//Захватываем диапазон ячеек
Excel.Range range1 = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[9, 9]);

//Шрифт для диапазона
range1.Cells.Font.Name = "Tahoma";
//Размер шрифта для диапазона
range1.Cells.Font.Size = 10;

//Захватываем другой диапазон ячеек
Excel.Range range2 = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[9, 2]);
range2.Cells.Font.Name = "Times New Roman";

//Задаем цвет этого диапазона. Необходимо подключить System.Drawing
range2.Cells.Font.Color = ColorTranslator.ToOle(Color.Green);
//Фоновый цвет
range2.Interior.Color = ColorTranslator.ToOle(Color.FromArgb(0xFF, 0xFF, 0xCC));

Расстановка рамок.

Расставляем рамки со всех сторон:

range2.Borders.get_Item(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous;
range2.Borders.get_Item(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous;
range2.Borders.get_Item(Excel.XlBordersIndex.xlInsideHorizontal).LineStyle = Excel.XlLineStyle.xlContinuous;
range2.Borders.get_Item(Excel.XlBordersIndex.xlInsideVertical).LineStyle = Excel.XlLineStyle.xlContinuous;
range2.Borders.get_Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous;

Цвет рамки можно установить так:

range2.Borders.Color = ColorTranslator.ToOle(Color.Red);

Выравнивания в диапазоне задаются так:

rangeDate.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
rangeDate.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;

Формулы

Определим задачу: получить сумму диапазона ячеек A4:A10.

Для начала снова получим диапазон ячеек:

Excel.Range formulaRange = sheet.get_Range(sheet.Cells[4, 1], sheet.Cells[9, 1]);

Далее получим диапазон вида A4:A10 по адресу ячейки ( [4,1]; [9;1] ) описанному выше:

string adder = formulaRange.get_Address(1, 1, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);

Теперь в переменной adder у нас хранится строковое значение диапазона ( [4,1]; [9;1] ), то есть A4:A10.

Вычисляем формулу:

//Одна ячейка как диапазон
Excel.Range r = sheet.Cells[10, 1] as Excel.Range;
//Оформления
r.Font.Name = "Times New Roman";
r.Font.Bold = true;
r.Font.Color = ColorTranslator.ToOle(Color.Blue);
//Задаем формулу суммы
r.Formula = String.Format("=СУММ({0}", adder);

Выделение ячейки или диапазона ячеек

Так же можно выделить ячейку или диапазон, как если бы мы выделили их мышкой:

sheet.get_Range("J3", "J8").Activate();
//или
sheet.get_Range("J3", "J8").Select();
//Можно вписать одну и ту же ячейку, тогда будет выделена одна ячейка.
sheet.get_Range("J3", "J3").Activate();
sheet.get_Range("J3", "J3").Select();

Авто ширина и авто высота

Чтобы настроить авто ширину и высоту для диапазона, используем такие команды:

range.EntireColumn.AutoFit(); 
range.EntireRow.AutoFit();

Получаем значения из ячеек

Чтобы получить значение из ячейки, используем такой код:

//Получение одной ячейки как ранга
Excel.Range forYach = sheet.Cells[ob + 1, 1] as Excel.Range;
//Получаем значение из ячейки и преобразуем в строку
string yach = forYach.Value2.ToString();

Добавляем лист в рабочую книгу

Чтобы добавить лист и дать ему заголовок, используем следующее:

var sh = workBook.Sheets;
Excel.Worksheet sheetPivot = (Excel.Worksheet)sh.Add(Type.Missing, sh[1], Type.Missing, Type.Missing);
sheetPivot.Name = "Сводная таблица";

Добавление разрыва страницы

//Ячейка, с которой будет разрыв
Excel.Range razr = sheet.Cells[n, m] as Excel.Range;
//Добавить горизонтальный разрыв (sheet - текущий лист)
sheet.HPageBreaks.Add(razr); 
//VPageBreaks - Добавить вертикальный разрыв

Сохраняем документ

ex.Application.ActiveWorkbook.SaveAs("doc.xlsx", Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

Как открыть существующий документ Excel

ex.Workbooks.Open(@"C:UsersMyuserDocumentsExcel.xlsx",
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing);

Комментарии

При работе с Excel с помощью C# большую помощь может оказать редактор Visual Basic, встроенный в Excel.

Для этого в настройках ленты надо добавить пункт «Разработчик». Далее начинаем запись макроса, производим действия и останавливаем запись.

Далее заходим в редактор Visual Basic и смотрим код, который туда записался:

Vusial Basic (VBA)

Например:

Sub Макрос1()
'
' Макрос1 Макрос
'

'
    Range("E88").Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$F$118"), , xlYes).Name = _
        "Таблица1"
    Range("A1:F118").Select
    ActiveSheet.ListObjects("Таблица1").TableStyle = "TableStyleLight9"
    Range("E18").Select
    ActiveWindow.SmallScroll Down:=84
End Sub

В данном макросе записаны все действия, которые мы выполнили во время его записи. Эти методы и свойства можно использовать в C# коде.

Данный метод так же может оказать помощь в формировании относительных формул, например, выполнить сложение чисел, находящиеся слева от текущей ячейки на 4 столбца, и т.п. Пример:

//Складываем значения предыдущих 12 ячеек слева
rang.Formula = "=СУММ(RC[-12]:RC[-1])";

Так же во время работы может возникнуть ошибка: метод завершен неверно. Это может означать, что не выбран лист, с которым идет работа.

Чтобы выбрать лист, выполните sheetData.Select(Type.Missing); где sheetData это нужный лист.


Просмотрено:
81 944

Вот фрагмент кода, который я использовал, чтобы показать вам общий шаблон для форматирования ячеек. Очевидно, что некоторые объявленные переменные, но они должны показать вам, что вам нужно.

sheet.get_Range("A" + CurrentRowIndex.ToString(), ColPrefix + CurrentRowIndex.ToString()).Font.Bold = true;
sheet.get_Range("A" + CurrentRowIndex.ToString(), ColPrefix + CurrentRowIndex.ToString()).Interior.Color = Color.Silver.ToArgb();
sheet.get_Range("A" + CurrentRowIndex.ToString(), ColPrefix + CurrentRowIndex.ToString()).BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);
sheet.get_Range("A" + CompetencyStartRowIndex.ToString(), ColPrefix + CurrentRowIndex.ToString()).BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);

Эта первая строка, предполагая, что CurrentRowIndex = 1 и ColPrefix = «B», заменив переменные на полученные значения, переведет на

sheet.get_Range("A1", "B1").Font.Bold = true;

Во всяком случае, вы хотите установить numberformat. (Coming..)

sheet.Cells[Row, Column].NumberFormat = "0.00"

Felikss

4 / 4 / 0

Регистрация: 21.08.2016

Сообщений: 404

1

07.03.2020, 13:12. Показов 3316. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Привет всем!
У меня в datagridview столбец где пишут номер объекта.
Когда сохраняешь таблицу в excel все номера объектов сохраняются нормально кроме одного объекта у которого номера 7-38 или 7-25 или 7-56.
В excel сохраняет июль.38 или июль.25 или июль.56.
П робовал этот код не получается в итоге 14062

C#
1
excel.Cells[2, 4].EntireColumn.NumberFormat = "@";

Надо как то в текстовом формате переконвертировать.
Как это сделать?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

07.03.2020, 13:12

4

2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

07.03.2020, 22:41

2

Лучший ответ Сообщение было отмечено Felikss как решение

Решение

Цитата
Сообщение от Felikss
Посмотреть сообщение

Пробовал этот код не получается в итоге 14062

А вы где его вставляли? До того, как занесли данные или после? Я использовал «до» и у меня нормально работало.



0



Felikss

4 / 4 / 0

Регистрация: 21.08.2016

Сообщений: 404

09.03.2020, 08:25

 [ТС]

3

chumich, У меня так оформлено:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  private void button22_Click(object sender, EventArgs e)
        {
if (advancedDataGridView9.Visible == true)
            {
                advancedDataGridView9.Columns.RemoveAt(0);
                if (advancedDataGridView6.Rows.Count > 0)
                {
                    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                    Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(Type.Missing);
                    Microsoft.Office.Interop.Excel.Worksheet worksheet = new Microsoft.Office.Interop.Excel.Worksheet();
                    List<DataGridViewColumn> listVisible = new List<DataGridViewColumn>();
                    foreach (DataGridViewColumn col in advancedDataGridView9.Columns)
                    {
                        if (col.Visible)
                            listVisible.Add(col);
                    }
                    for (int i = 1; i < listVisible.Count + 1; i++)
                    {
                        excel.Cells[1, i] = listVisible[i - 1].HeaderText;
                        excel.Cells[1, i].Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightBlue);
                    }
                    for (int i = 0; i < advancedDataGridView9.Rows.Count; i++)
                    {
                        for (int j = 0; j < listVisible.Count; j++)
                        {
                            excel.Cells[i + 2, j + 1] = advancedDataGridView9.Rows[i].Cells[listVisible[j].Name].Value;
                        }
                    }
                    worksheet = workbook.Sheets["Sheet1"];
                    worksheet = workbook.ActiveSheet;
                    worksheet.Name = "DVKC Reports";
                    excel.Columns[1].ColumnWidth = 4;
                    excel.Columns[2].ColumnWidth = 6;
                    excel.Columns[3].ColumnWidth = 14;
                    excel.Columns[4].ColumnWidth = 14;
                    excel.Columns[5].ColumnWidth = 32;
                    excel.Columns[6].ColumnWidth = 62;
                    excel.Columns[7].ColumnWidth = 52;
                    excel.Columns[8].ColumnWidth = 52;                   
                    excel.Cells[1, 1].EntireRow.Font.Bold = true;
 
                    excel.Cells[2, 4].EntireColumn.NumberFormat = "@";
                 
                    excel.Columns.Font.Name = "Times New Roman";
                    excel.Columns.WrapText = true;
                    excel.Columns.Font.Size = 12;
                    excel.Columns.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignTop;
                    excel.Columns.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;
                    excel.Columns.BorderAround(true, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic);
                    worksheet.PageSetup.Orientation = Microsoft.Office.Interop.Excel.XlPageOrientation.xlLandscape;
                    worksheet.PageSetup.TopMargin = excel.CentimetersToPoints(1.91);
                    worksheet.PageSetup.LeftMargin = excel.CentimetersToPoints(1.78);
                    worksheet.PageSetup.RightMargin = excel.CentimetersToPoints(1.78);
                    worksheet.PageSetup.BottomMargin = excel.CentimetersToPoints(1.91);
                    worksheet.PageSetup.HeaderMargin = excel.CentimetersToPoints(0.76);
                    worksheet.PageSetup.FooterMargin = excel.CentimetersToPoints(0.76);                  
                    Microsoft.Office.Interop.Excel.Range last = excel.Cells.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
                    Microsoft.Office.Interop.Excel.Range cellRange = excel.get_Range("A1", last);
                    Microsoft.Office.Interop.Excel.Borders xborders = cellRange.Borders;
                    xborders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                    xborders.Weight = 2d;
                    DataGridViewCheckBoxColumn dgvCmb = new DataGridViewCheckBoxColumn();
                    dgvCmb.ValueType = typeof(bool);
                    dgvCmb.Name = "dataGridViewCheckBoxColumn8";
                    dgvCmb.HeaderText = "Atz.";
                    dgvCmb.Width = 47;
                    advancedDataGridView9.Columns.Insert(0, dgvCmb);                 
                    var saveFileDialoge = new SaveFileDialog();
                    saveFileDialoge.Filter = "Excel Workbook (*.xlsx)|*.xlsx|Excel Workbook (*.xls)|*.*";
                    _inputParameter.FileName = saveFileDialoge.FileName;
                    if (saveFileDialoge.ShowDialog() == DialogResult.OK)
                    {
                        progressBar1.Minimum = 0;
                        progressBar1.Value = 0;
                        backgroundWorker1.RunWorkerAsync(_inputParameter);
                        workbook.SaveAs(saveFileDialoge.FileName, XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, false, false,
                        XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
                    }
                    excel.Columns.AutoFit();
                    excel.Visible = true;
                }
            }



0



chumich

2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

09.03.2020, 08:57

4

Лучший ответ Сообщение было отмечено Felikss как решение

Решение

У вас после занесения. Переставьте до цикла с этой строкой:

C#
1
excel.Cells[i + 2, j + 1] = advancedDataGridView9.Rows[i].Cells[listVisible[j].Name].Value;

И еще, если не поможет, попробуйте так (если у вас нет арифметических действий где-нибудь):

C#
1
excel.Cells[i + 2, j + 1] = advancedDataGridView9.Rows[i].Cells[listVisible[j].Name].Value.ToString();



1



4 / 4 / 0

Регистрация: 21.08.2016

Сообщений: 404

09.03.2020, 09:46

 [ТС]

5

chumich, Спасибо вам,всё получилось.



0



Содержание

  1. Работа с Excel с помощью C# (Microsoft.Office.Interop.Excel)
  2. Расстановка рамок.
  3. Формулы
  4. Выделение ячейки или диапазона ячеек
  5. Авто ширина и авто высота
  6. Получаем значения из ячеек
  7. Добавляем лист в рабочую книгу
  8. Добавление разрыва страницы
  9. Сохраняем документ
  10. Как открыть существующий документ Excel
  11. Комментарии
  12. Работа с Excel с помощью C# (Microsoft.Office.Interop.Excel): 11 комментариев
  13. Cell Format Интерфейс
  14. Определение
  15. Комментарии
  16. Свойства
  17. Методы
  18. Format an Excel column (or cell) as Text in C#?
  19. 10 Answers 10
  20. Установите формат для всех ячеек в Excel без выделения, используя C # и VSTO
  21. 2 ответа
  22. Display Format Интерфейс
  23. Определение
  24. Комментарии
  25. Свойства

Работа с Excel с помощью C# (Microsoft.Office.Interop.Excel)

Оставляю заметку по работе с Excel с помощью C#.

Привожу фрагменты кода, которые искал когда-то сам для работы с Excel документами.

Наработки очень пригодились в работе для формирования отчетности.

Прежде всего нужно подключить библиотеку Microsoft.Office.Interop.Excel.

Visual Studio здесь довольно старой версии. Если у вас версия новая, отличаться будет только вид окна.

Далее создаем псевдоним для работы с Excel:

using Excel = Microsoft.Office.Interop.Excel;

Расстановка рамок.

Расставляем рамки со всех сторон:

Цвет рамки можно установить так:

Выравнивания в диапазоне задаются так:

Формулы

Определим задачу: получить сумму диапазона ячеек A4:A10.

Для начала снова получим диапазон ячеек:

Excel.Range formulaRange = sheet.get_Range(sheet.Cells[4, 1], sheet.Cells[9, 1]);

Далее получим диапазон вида A4:A10 по адресу ячейки ( [4,1]; [9;1] ) описанному выше:

string adder = formulaRange.get_Address(1, 1, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);

Теперь в переменной adder у нас хранится строковое значение диапазона ( [4,1]; [9;1] ), то есть A4:A10.

Выделение ячейки или диапазона ячеек

Так же можно выделить ячейку или диапазон, как если бы мы выделили их мышкой:

Авто ширина и авто высота

Чтобы настроить авто ширину и высоту для диапазона, используем такие команды:

Получаем значения из ячеек

Чтобы получить значение из ячейки, используем такой код:

Добавляем лист в рабочую книгу

Чтобы добавить лист и дать ему заголовок, используем следующее:

Добавление разрыва страницы

Сохраняем документ

Как открыть существующий документ Excel

Комментарии

При работе с Excel с помощью C# большую помощь может оказать редактор Visual Basic, встроенный в Excel.

Для этого в настройках ленты надо добавить пункт «Разработчик». Далее начинаем запись макроса, производим действия и останавливаем запись.

Далее заходим в редактор Visual Basic и смотрим код, который туда записался:

В данном макросе записаны все действия, которые мы выполнили во время его записи. Эти методы и свойства можно использовать в C# коде.

Данный метод так же может оказать помощь в формировании относительных формул, например, выполнить сложение чисел, находящиеся слева от текущей ячейки на 4 столбца, и т.п. Пример:

Так же во время работы может возникнуть ошибка: метод завершен неверно. Это может означать, что не выбран лист, с которым идет работа.

Чтобы выбрать лист, выполните sheetData.Select(Type.Missing); где sheetData это нужный лист.

Работа с Excel с помощью C# (Microsoft.Office.Interop.Excel): 11 комментариев

Как прочитать данные из ячейки excel,и записать эти данные в sql server?

Добрый день.
Отправил на почту.

Добрый день.
А мне можно тоже самое?)

Здравствуйте, как изменить цвет диаграммы при работе в C#?(круговая диаграмма)

Вы можете записать макрос на изменение цвета в Visual Basic и списать получившийся код. Затем использовать его в своей программе.

Здравствуйте.
Можете подсказать, как «заставить» приложение работать с разными версиями MS Office? На машине разработчика стоит Office 2010, при запуске на машине с 2003-м — увы — ошибка.

Microsoft.Office.Interop.Excel это довольно старый способ работать с Excel документами.
Что касается версии Office 2003, то он использует совсем другой драйвер.
Соответственно версия Microsoft.Office.Interop.Excel.dll нужна старая, плюс драйвер microsoft jet 4.0, который на новых системах (Win 8, 10) работает неправильно.
Единственное, что могу посоветовать, так это скачать Microsoft Office Compatibility Pack для Office 2003, чтобы научить его открывать xslx документы.
А в своей программе использовать не Interop.Excel, а библиотеку EPPlus. Она работает с excel документами, используя технологию OpenXml и не надо париться по поводу драйверов.
Код будет очень похож на Interop.Excel-ный.

Очень полезная штука, спасибо за удобное представление информации на Вашем сайте!

Скажите пожалуйста, как прочитать данные из ячейки Excel и записать их в SQL Server?

Источник

Cell Format Интерфейс

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Представляет критерии поиска для формата ячейки.

Комментарии

FindFormat Используйте свойства или ReplaceFormat объекта , Application чтобы вернуть объект CellFormat.

Свойства , Fontили Interior объекта CellFormat можно использовать Bordersдля определения условий поиска для формата ячейки.

Свойства

Значение true , если текст автоматически отступается, если для выравнивания текста в ячейке задано равное распределение по горизонтали или по вертикали.

Application Возвращает объект , представляющий приложение Microsoft Excel.

Позволяет пользователю задавать или возвращать условия поиска на основе формата границы ячейки.

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

Font Возвращает объект , позволяющий пользователю задавать или возвращать условия поиска на основе формата шрифта ячейки.

Значение true , если формула будет скрыта при защите листа. Возвращает значение NULL , если указанный диапазон содержит некоторые ячейки с значением FormulaHidden , равными True , и некоторые ячейки с FormulaHidden , равными False.

Возвращает или задает горизонтальное выравнивание для указанного объекта.

Возвращает или задает уровень отступа для ячейки или диапазона. Может быть целым числом от 0 до 15.

Возвращает объект, Interior позволяющий пользователю задавать или возвращать критерии поиска на основе внутреннего формата ячейки.

Значение true , если объект заблокирован; False , если объект можно изменить при защите листа. Возвращает значение NULL , если указанный диапазон содержит как заблокированные, так и разблокированные ячейки.

Значение true , если диапазон или стиль содержит объединенные ячейки.

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

Возвращает или задает код формата для объекта в виде строки на языке пользователя.

Ориентация текста. Может быть целочисленным значением от –90 до 90 градусов.

Возвращает родительский объект для указанного объекта.

Значение true , если текст автоматически сжимается в соответствии с доступной шириной столбца. Возвращает значение NULL, если для этого свойства не задано одно и то же значение для всех ячеек в указанном диапазоне.

Возвращает или задает вертикальное выравнивание указанного объекта.

Значение true, если Microsoft Excel заключает текст в объект . Возвращает значение NULL , если указанный диапазон содержит некоторые ячейки, которые обтекают текст, и другие ячейки, которые не содержат.

Методы

Очищает критерии, заданные в свойствах FindFormat и ReplaceFormat .

Источник

Format an Excel column (or cell) as Text in C#?

I am losing the leading zeros when I copy values from a datatable to an Excel sheet. That’s because probably Excel treats the values as a number instead of text.

I am copying the values like so:

How do I format a whole column or each cell as Text?

A related question, how to cast myWorksheet.Cells[i + 2, j] to show a style property in Intellisense?

10 Answers 10

Below is some code to format columns A and C as text in SpreadsheetGear for .NET which has an API which is similar to Excel — except for the fact that SpreadsheetGear is frequently more strongly typed. It should not be too hard to figure out how to convert this to work with Excel / COM:

Disclaimer: I own SpreadsheetGear LLC

If you set the cell formatting to Text prior to adding a numeric value with a leading zero, the leading zero is retained without having to skew results by adding an apostrophe. If you try and manually add a leading zero value to a default sheet in Excel and then convert it to text, the leading zero is removed. If you convert the cell to Text first, then add your value, it is fine. Same principle applies when doing it programatically.

Solution that worked for me for Excel Interop:

This code should run before putting data to Excel. Column and row numbers are 1-based.

A bit more details. Whereas accepted response with reference for SpreadsheetGear looks almost correct, I had two concerns about it:

  1. I am not using SpreadsheetGear. I was interested in regular Excel communication thru Excel interop without any 3rdparty libraries,
  2. I was searching for the way to format column by number, not using ranges like «A:A».

Before your write to Excel need to change the format:

I’ve recently battled with this problem as well, and I’ve learned two things about the above suggestions.

  1. Setting the numberFormatting to @ causes Excel to left-align the value, and read it as if it were text, however, it still truncates the leading zero.
  2. Adding an apostrophe at the beginning results in Excel treating it as text and retains the zero, and then applies the default text format, solving both problems.

The misleading aspect of this is that you now have a different value in the cell. Fortuately, when you copy/paste or export to CSV, the apostrophe is not included.

Conclusion: use the apostrophe, not the numberFormatting in order to retain the leading zeros.

Use your WorkSheet.Columns.NumberFormat , and set it to string «@» , here is the sample:

Note: this text format will apply for your hole excel sheet!

If you want a particular column to apply the text format, for example, the first column, you can do this:

or this will apply the specified range of woorkSheet to text format:

Источник

Установите формат для всех ячеек в Excel без выделения, используя C # и VSTO

Предположим, я хочу установить формат («Текст», «Число», «Процент», «Дата» и т. Д.) для всех ячеек на листе Excel.

Я теперь, как установить формат для одной строки или одного столбца. Например, код, устанавливающий формат «Процент» для всех ячеек 3-й строки, выглядит следующим образом (десятичный разделитель зависит от вашей локализации Windows):

Однако когда я пытаюсь сделать то же самое для всех ячеек листа со следующим кодом:

, У меня проблема — на самом деле формат ячеек будет изменен , но на какой-то неправильный формат (в данном случае реальный установленный формат будет «# 000%», то есть распознается Excel как «Пользовательский формат»).

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

Однако мне очень хочется решить эту проблему без выделения. Как я могу это сделать?

2 ответа

Позвольте мне ответить на мой собственный вопрос.

Если вкратце, вместо кода

, следует использовать следующий:

Тогда формат результата будет правильным!

Теперь мое объяснение: свойство NumberFormat выглядит правильно , применимым только для типа dynamic , но не для типа Microsoft.Office.Interop.Excel.Range . Когда кто-то пишет что-то вроде this.worksheet.Cells или this.worksheet.Range[«A1», «C3»] , он / она получает тип Microsoft.Office.Interop.Excel.Range ; когда кто-то пишет что-то вроде this.worksheet.Rows[3] , он / она получает тип dynamic . Поэтому, чтобы использовать свойство NumberFormat , просто приведите ваш объект Microsoft.Office.Interop.Excel.Range к объекту dynamic !

Хотя я считаю ваши ответы людям, пытающимся помочь вам, очень оскорбительными, я попытался немного проигнорировать это, чтобы иметь в виду, что мы пытаемся помочь друг другу здесь и сосредоточиться на поиске решения для сценария.

Итак, вот моя последняя попытка доставить вам удовольствие .

Я тестировал его здесь и, похоже, работает (имейте в виду, что, как вы уже упоминали, вам может потребоваться переключить десятичный символ в зависимости от вашей локализации).

Источник

Display Format Интерфейс

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Представляет параметры отображения для связанного Range объекта.

Комментарии

Только для чтения.

Такие действия, как изменение условного форматирования или стиля таблицы диапазона, могут привести к тому, что то, что отображается в текущем пользовательском интерфейсе, будет несовместимо со значениями в соответствующих свойствах Range объекта. Используйте свойства объекта для DisplayFormat возврата значений, отображаемых в текущем пользовательском интерфейсе.

Свойства

Возвращает значение, указывающее, будет ли Microsoft Excel автоматически отступить текст связанного Range объекта, если выравнивание текста в ячейке равное (горизонтальное или вертикальное), как оно отображается в текущем пользовательском интерфейсе.

При использовании без квалификатора объектов это свойство возвращает Application объект, представляющий приложение Microsoft Excel. При использовании с квалификатором объектов это свойство возвращает Application объект, представляющий создателя указанного объекта.

Borders Возвращает объект , представляющий границы связанного Range объекта в том виде, в котором он отображается в текущем пользовательском интерфейсе.

Characters Возвращает объект , представляющий диапазон символов в тексте связанного Range объекта, который отображается в текущем пользовательском интерфейсе.

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

Font Возвращает объект , представляющий шрифт связанного Range объекта в том виде, в котором он отображается в текущем пользовательском интерфейсе.

Возвращает значение, указывающее, скрыта ли формула связанного Range объекта при защите листа в текущем пользовательском интерфейсе.

Возвращает значение, представляющее горизонтальное выравнивание связанного Range объекта, отображаемого в текущем пользовательском интерфейсе.

Возвращает значение, представляющее уровень отступа связанного Range объекта, отображаемого в текущем пользовательском интерфейсе.

Interior Возвращает объект , представляющий внутреннюю часть связанного Range объекта в том виде, в котором он отображается в текущем пользовательском интерфейсе.

Возвращает значение, указывающее, заблокирован ли связанный Range объект при отображении в текущем пользовательском интерфейсе.

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

Возвращает значение, представляющее код формата связанного Range объекта, отображаемого в текущем пользовательском интерфейсе.

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

Возвращает значение, представляющее ориентацию текста связанного Range объекта, отображаемого в текущем пользовательском интерфейсе.

Возвращает родительский объект для указанного объекта.

Возвращает порядок чтения связанного Range объекта в том виде, в котором он отображается в текущем пользовательском интерфейсе.

Возвращает значение, указывающее, будет ли Microsoft Excel автоматически сжимать текст в соответствии с доступной шириной столбца связанного Range объекта, как он отображается в текущем пользовательском интерфейсе.

Возвращает значение, содержащее Style объект , который представляет стиль связанного Range объекта в том виде, в котором он отображается в текущем пользовательском интерфейсе.

Возвращает значение, представляющее вертикальное выравнивание связанного Range объекта, отображаемого в текущем пользовательском интерфейсе.

Возвращает значение, указывающее, выполняет ли Microsoft Excel перенос текста связанного Range объекта в том виде, в котором он отображается в текущем пользовательском интерфейсе.

Источник

Понравилась статья? Поделить с друзьями:
  • Interop excel save file
  • Internet word of mouth
  • Internet word derived from
  • Internet fill in the gaps with the correct word the
  • Internet explorer редактировать с помощью word