- Download source code
Summary
Attributes can be used to improve maintainability. I converted this application to use Attributes to specify information with each property in the class, making maintenance a lot easier and reduce the chances of bugs. These properties of each property are used to modify the properties before use, and to determine whether the value of the property is valid. Previously there was a method in the class that returned a collection of classes that contained this information.
Introduction
I previously posted an article Excel Add-in Framework for Validating and Exporting Data on Codeproject. Before I posted it I made a number of improvements over my original implementation, many of which improved reuse. Eventually the design required only one customized class to use outside of some UI stuff. I also wanted to improve the way that validation was specified. I originally designed the specification of the validation to be done with anonymous methods, but this was not as maintainable as I would have liked. Part of the problem was that I not only had to have the properties defined in a class, but I also had to specify the properties in a method that included the name of the property as a string, and the validation. This meant that there were two places had to define a property, with all the maintenance issues associated with this.
I suspected that I could do better by using the Attribute class, but there were more important issues to clean up and I had never programmed attributes. Then there were a number of design issues that would have to be resolved, and the possibility of doing serious damage to the application.
Research
I started out searching for articles on the Codeproject site. The first article I read was A Programmer’s Introduction to C# — Chapter 21. The article is Ok, but was a little simplistic, probably because it was targeted at a class and not a class’s properties and methods. The second article was much more useful: An attribute based approach to business object validation was more useful since it was somewhat similar to what I was doing, but I did not think he used his attributes as well as he could have.
Attribute Design
All the classes for the attributes for validation should inherit from an interface so that it would be easy to filter. Only a method required does do the actual validation having a single argument which is of type ValueValidator
. This works great since it has all the information needed for validation, and encapsulates the Value string so when the Value
property is updated, the code does not have to worry about strings being immutable. I want to be able to update the Value
property for several reasons:
- Convert all the characters to a specific case,
- Allow that formatting can be applied such as displaying only the date from
DateTime
fields. - So substitution can be done.
interface IValueValidationAttribute { string Validate(ValueValidator valueValidator); }
An example of an Attribute that inherits from this interface
that validates that a value is a valid date:
[AttributeUsage(AttributeTargets.Property)] public class IsDateValueValidationAttribute : Attribute, IValueValidationAttribute { private readonly string _returnFormat; public IsDateValueValidationAttribute(string returnFormat = null) { _returnFormat = returnFormat; } public string Validate(ValueValidator valueValidator) { Contract.Requires(valueValidator != null, "value argument is null"); DateTime date; if (!DateTime.TryParse(valueValidator.Value, out date)) return "The value must be a valid date"; if (_returnFormat != null) valueValidator.Value = date.ToString(_returnFormat); return null; } }
As can be seen, the constructor takes an optional argument that is the format to return if Value
is a valid DataTime
format. The Validate method then is responsible for checking that the Value matches the requirements. If it does, a null
is returned, otherwise a string
describing the error is returned. Also, the argument form the constructor is used to update the ValueValidator
Value
property so it will be a string of the value in the specified format. In use in the example the format is specified to be short date so that when displayed in the DataGridView
control, only the date will displayed, and not the time.
AbstractValidationObject Class
To use these attributes, a class inherits from the abstract AbstractValidationObject
class. The class that inherits is used to define the properties that will be exported as properties and provide attributes for these properties that define the validation and if the title (which is the name of the property) must be in the header row for validation. There are two methods in this class. One of the properties returns a collection of ValueValidator
class instances, one for each property that is to be read from the excel sheet:
public IEnumerable<ValueValidator> GetValidators() { return GetType().GetProperties().Select( propertyInfo => new ValueValidator(propertyInfo, this)); }
Notice that a new instance of the ValueValidator
class is created each time the GetValidators
method is called. This is because each ValueValidator
represents a cell in the Excel spreadsheet and thus a single value of the property.
The second method does the validation on a single ValueValidator
instance:
public string Validate(ValueValidator valueValidator) { var propertyInfo = GetType().GetProperty(valueValidator.HeaderText); return propertyInfo.GetCustomAttributes( typeof(IValueValidationAttribute), false). Select(customAttribute => ((IValueValidationAttribute)customAttribute). Validate(valueValidator)). FirstOrDefault(returnResult => returnResult != null); }
The return value is a string that describes the error if there is an issue with validation. If the value within the ValueValidator
is valid, the return value is null
. The ValueValidator
provides both the name of the property and the value. The name is used to look up the PropertyInfo
for the property using reflection, and then reflection is used to look the custom attributes using the GetCustomAttributes
method of the PropertyInfo
class. The GetCustomAttributes
argument is used to filter only those Attributes that inherit from IValueValidationAttribute
. Fortunately the order is maintain, so the instances of IValueValidationAttribute
can be processed in the order they are enumerated. This is done by executing the Validate
method on the class returned. This Validate
method determines if the Value
in the ValueValidator
passes a single test. Process continues until first instance of the Attribute
instance returns a no-null string, or all instances have been processed.
ValueValidator Class
The ValueValidator
class is used to contain information about the property, and specific information about the cell containing the specific information. There will be a ValueValidator
instance for each property for each Excel row. Thus the ValueValidator
maintains the following information
- The Header text and or the property name (could change the design to have optionally a different text for the header). This is used for looking up the
PropertyInfo
in theAbstractValidationObject
class and searching for the cell that represents the header for the column. There is also information about if the header is required to successfully process the worksheet. - The cell associated with the value, which is used to reset the formatting if necessary. Resetting the formats needs to also be saved. Information on how to reset the Excel cell formatting uses
ISaveFormats
interface. - The Value that user wants associated with property that will be validated.
- An instance of the
AbstractValidationObject
that is used for validating. In the design, allValueValidator
instances are using the same instance of theAbstractValidationObject
class for validation.
In the constructor, the ValueValidator
takes two arguments: the PropertyInfo
argument which is used to find attributes associated with the property such as the Header Text, and the AbstractValidationObject
instance, which is used for validation.
public ValueValidator(PropertyInfo propertyInfo, AbstractValidationObject abstractValidationObject) { Name = propertyInfo.Name; var alternateTitleAttribute = (AlternateTitleAttribute)propertyInfo. GetCustomAttributes(typeof(AlternateTitleAttribute), false).FirstOrDefault(); HeaderText = alternateTitleAttribute == null ? Name : alternateTitleAttribute.AlternateTitle; Required = propertyInfo.GetCustomAttributes (typeof(RequiredTitleAttribute), false).Any(); _abstractValidationObject = abstractValidationObject; Validate(null, false); }
The most important method in the ValueValidator
is the Validate
method which takes and argument of the Excel Range
which is the worksheet cell, and a flag that indicates if an error is to be thrown when validation fails.
public void Validate(Range cell, bool throwException = true) { _cell = cell; Value = cell == null ? string.Empty : cell.Value == null ? string.Empty : cell.Value.ToString(); IsValid = true; _errorMessage = _abstractValidationObject.Validate(this); if (!string.IsNullOrEmpty(_errorMessage)) { _errorMessage = string.Format(_errorMessage, HeaderText); IsValid = false; if (throwException) throw new ValidatorException(_errorMessage); } }
The functions that this method is responsible for are:
- Saving an instance of the Range object which represents the cell containing the value. This is required so that the cell can be formatted to give feedback to the user about validation errors, and later to reset the formatting.
- Updating the Value property to the value contained in the cell.
- Running the
AbstractValidationObject
Validate
method, saving the return value which represents the error message. Also does - Formatting on the error message if there is a validation header (adding the Header text to the message if so formatted) and throwing a
ValidatorException
if the return from the validation is not null. - Setting or resetting the
IsValid
property so that it can be determined if a row passed all validation.
Additional Advantage of New Design
If you look at the original project you will see that I wrap a string in a class to make it mutable. This was used in the validators so that the Value
could be updated. Using the attribute design the Value
property of the ValueValidator
instance is updated when value is changed.
Conclusion
Attributes make the code for customizing this Excel code to support the generic code used to export data a lot cleaner and easier to maintain. I particularly like that it is really easy to add an attribute, but this does not increase the complexity of customizing up the export. The flexibility of the approach was shown when I added the ability to have a title with spaces. This just required adding a new attribute, and some changes in the initialization of the ValueValidator
constructor. I also added a new property because I needed the property name readily available.
Has been working as a C# developer on contract for the last several years, including 3 years at Microsoft. Previously worked with Visual Basic and Microsoft Access VBA, and have developed code for Word, Excel and Outlook. Started working with WPF in 2007 when part of the Microsoft WPF team. For the last eight years has been working primarily as a senior WPF/C# and Silverlight/C# developer. Currently working as WPF developer with BioNano Genomics in San Diego, CA redesigning their UI for their camera system. he can be reached at qck1@hotmail.com.
Ячейка в Excel – это основной элемент электронной таблицы, образованный пересечением столбца и строки. Имя столбца и номер строки, на пересечении которых находится ячейка, задают адрес ячейки и представляют собой координаты, определяющие расположение этой ячейки на листе.
Основные сведения
Каждый лист в Excel состоит из тысячи прямоугольников, которые называют ячейками. Ячейка – это пересечение строки и столбца. Столбцы в Excel обозначают буквами (A, B, C), а строки обозначают числами (1, 2, 3).
Каждой ячейке в Excel присваивается имя, его также называют адрес. Например, Е7 – это ячейка, которая находится на пересечении столбца Е и строки 7. При выделении ячейки ее адрес отображается в поле Имя. При выборе ячейки, заголовки строки и столбца, на пересечении которых она находится, становятся подсвеченными.
ВЫДЕЛЕНИЕ ЯЧЕЕК
В Excel имеется возможность выбирать сразу несколько ячеек. Набор из двух или более ячеек принято называть диапазоном. Любой диапазон, точно также, как и ячейка, имеет свой адрес. Адрес диапазона состоит из адреса левой верхней и правой нижней ячеек, разделенных двоеточием. Такой диапазон называют смежным или непрерывным. Напимер на рисунке ниже выделен диапазон ячеек A1:A8:
СОДЕРЖИМОЕ ЯЧЕЕК
Содержимое ячейки в Excel может быть самым разнообразным. Это могут быть простые данные, которые хранятся в ячейках, либо атрибуты, которые отвечают за внешний вид. Любая информация, которую вводится на рабочий лист Excel, хранится в ячейке. Каждая ячейка может содержать определенные данные, включая текст, форматирование, формулы и функции.
- Ячейка может содержать текст, состоящий из букв, цифр или дат.
- Ячейка может содержать атрибуты форматирования, которые влияют на отображение букв, цифр или дат. С помощью атрибутов форматирования можно изменить фон ячейки.
- Ячейка может содержать формулы и функции, которые позволяют вычислять различные значения.
ВВОД В ЯЧЕЙКУ EXCEL
1. Нужно щелкнуть по ячейке, чтобы выделить ее.
2. Ввести данные в выделенную ячейку, затем нажать Enter на клавиатуре. Содержимое появится как в ячейке, так и в строке формул. Также можно вводить и редактировать данные прямо в строке формул.
УДАЛЕНИЕ ИЗ ЯЧЕЙКИ EXCEL
1. Нужно выбрать ячейку, содержащую данные, которые требуется удалить.
2. Нажать клавишу Delete или Backspace на клавиатуре. Содержимое будет удалено. (Клавиша Delete позволяет удалить значения сразу из всех выделенных ячеек. Клавиша Backspace очищает только активную ячейку.)
КОПИРОВАНИЕ СОДЕРЖИМОГО В EXCEL
Excel позволяет копировать данные, которые уже имеются на рабочем листе, и вставлять их в другие ячейки. В ряде случаев это может сэкономить много времени и сил.
1. Нужно выделить ячейку, которую необходимо скопировать.
2. Нажать иконку «Копировать» на вкладке «Главная» или комбинацию клавиш Ctrl+C на клавиатуре.
3. Вокруг скопированных ячеек появится динамическая пунктирная линия. Выделяем ячейку, в которую нужно вставить данные.
4. Нажать иконку «Вставить» на вкладке «Главная» или комбинацию клавиш Ctrl+V на клавиатуре.
ПЕРЕТАСКИВАНИЕ ЯЧЕЕК В EXCEL
В Excel есть хороший способ перетаскивания ячеек называется он drag-and-drop (тащи и бросай).
1. Нужно выделить ячейку, которую хотим переместить.
2. Наводим указатель мыши на границу выделенной ячейки, курсор примет вид черного перекрестия со стрелками.
3. Нажимаем левую кнопку мыши и, не отпуская ее, перемещаем курсор в требуемое место. Отпускаем левую кнопку мыши, ячейки окажутся в требуемом месте.
Перемещение ячейки в Excel
В отличие от команды «Копировать», которая дублирует содержимое ячейки, команда «Вырезать» позволяет перемещать данные между ячейками.
1. Выделяем ячейку, которую хотим вырезать.
2. Нажимаем иконку «Вырезать» на вкладке «Главная» или комбинацию клавиш Ctrl+X на клавиатуре.
3. Вокруг ячеек, как и при копировании, появится динамическая пунктирная линия. Выделяем ячейки, в которые необходимо переместить данные.
4. Нажимаем иконку «Вставить» на вкладке «Главная» или нажмите Ctrl+V на клавиатуре. Вырезанные ячейки переместятся на новое место вместе с атрибутами форматирования.
АВТОЗАПОЛНЕНИЕ ЯЧЕЕК В EXCEL
Автозаполнение ячеек в Excel позволяет ускорить ввод данных на рабочий лист. Некоторые действия в Excel приходится повторять по несколько раз, что отнимает большое количество времени. Именно для автоматизации таких задач и была разработана функция автозаполнения.
Иногда возникает необходимость скопировать содержимое в несколько смежных ячеек листа. Можно копировать и вставлять данные в каждую ячейку по отдельности, но есть способ гораздо проще. Для этого необходимо воспользоваться маркером автозаполнения, который позволяет быстро скопировать и вставить данные.
1. Выделяем ячейку, данные которой необходимо продублировать. В правом нижнем углу выделенной ячейки появится маленький квадрат – это маркер автозаполнения.
2. Нажимаем и, удерживая левую кнопку мыши, перетаскиваем маркер автозаполнения, пока все требуемые ячейки не будут выделены. Разом можно заполнять ячейки либо столбца, либо строки. Отпускаем кнопку мыши, чтобы заполнить выбранные ячейки.
МГНОВЕННОЕ ЗАПОЛНЕНИЕ В EXCEL
В Excel 2013 появилась новая опция «Мгновенное заполнение», которая может автоматически вводить данные на лист, экономя время. Точно так же, как и Автозаполнение, данная опция определяет, какого рода информацию нужно вводить на лист.
Начинаем вводить данные на листе. Когда функция «Мгновенное заполнение» определит закономерность, под выделенной ячейкой появится предварительный просмотр вариантов. Нажимаем Enter. Данные будут добавлены на лист.
ПОИСК В EXCEL
При работе с большим количеством данных в Excel, иногда достаточно трудно отыскать какую-то конкретную информацию. И, как правило, такой поиск занимает очень много времени. Excel предлагает прекрасный инструмент поиска. Можно с легкостью отыскать любую нужную информацию в рабочей книге Excel с помощью команды «Найти», которая позволяет еще и изменить данные с помощью инструмента «Найти и Заменить».
1. На вкладке «Главная» нужно воспользоваться командой «Найти и выделить», а затем из раскрывающегося списка выбераем пункт «Найти».
2. Появится диалоговое окно «Найти и заменить». Вводим данные, которые необходимо отыскать.
3. Нажимем «Найти далее». Если данные присутствуют на листе, то они будут выделены.
4. Если еще раз нажать на кнопку «Найти далее», то можно увидеть следующий вариант поиска. Также можно выбрать «Найти все», чтобы увидеть все варианты, которые отыскал Excel.
ЗАМЕНА СОДЕРЖИМОГО ЯЧЕЙКИ В EXCEL
Бывают случаи, когда допущена ошибка, повторяющаяся во всей книге Excel. Например, неправильно написано чье-то имя или необходимо изменить определенное слово или фразу на другую. Можно воспользоваться инструментом «Найти и заменить», чтобы быстро внести исправления.
1. На вкладке «Главная» нажимаем команду «Найти и выделить», а затем из раскрывающегося списка выбераем пункт «Заменить».
2. Появится диалоговое окно «Найти и заменить». Вводим текст, который ищем в поле «Найти».
3. Вводим текст, на который требуется заменить найденный, в поле «Заменить на». А затем нажимаем «Найти далее». Если значение будет найдено, то содержащая его ячейка будет выделена.
4. После нахождения нужного текста выбераем одну из опций замены:
- Заменить: исправляет по одному значению зараз.
- Заменить все: исправляет все варианты искомого текста в книге.
Появится диалоговое окно, подтверждающее количество замен, которые будут сделаны. Нажимаем «ОК» для продолжения.
На чтение 3 мин. Просмотров 575 Опубликовано 27.07.2019
Содержание
- Думайте об атрибуте как о характеристике
- Что такое атрибут?
- Атрибуты описывают сущности
- Является ли атрибут полем?
- Определение атрибутов
Думайте об атрибуте как о характеристике
База данных является более мощной, чем электронная таблица, на которую она похожа, потому что она обладает огромными возможностями поиска. Реляционные базы данных выполняют перекрестные ссылки на записи в разных таблицах и выполняют сложные вычисления для большого количества взаимосвязанных данных. Информация организована таким образом, что ее легко управлять, получать к ней доступ и обновлять.
Что такое атрибут?
База данных состоит из таблиц. Каждая таблица имеет столбцы и строки. Каждая строка (называемая кортежем) представляет собой набор данных, который применяется к одному элементу. Каждый столбец (атрибут) содержит описание характеристик строк. Атрибут базы данных – это имя столбца и содержимое полей под ним в таблице в базе данных.
Если вы продаете продукты и вводите их в таблицу со столбцами для ProductName, Price и ProductID, каждый из этих заголовков является атрибутом. В каждом поле под этими заголовками вы будете вводить названия продуктов, цены и идентификаторы продуктов соответственно. Каждая из записей поля также является атрибутом.
Атрибут – это отдельный фрагмент данных в кортеже, к которому он принадлежит. Каждый кортеж представляет собой набор данных, который применяется к одному элементу.
Это имеет смысл, когда вы думаете об этом, учитывая, что нетехническое определение атрибута состоит в том, что он определяет характеристику или качество чего-либо.
Атрибуты описывают сущности
Рассмотрим базу данных, разработанную бизнесом. Скорее всего, он включает в себя таблицы – также называемые сущностями проектировщиками баз данных – для клиентов, сотрудников и продуктов. Таблица «Продукты» определяет характеристики каждого продукта. Они могут включать идентификатор продукта, название продукта, идентификатор поставщика (используется в качестве внешнего ключа), количество и цену. Каждая из этих характеристик является атрибутом таблицы (или сущности) с именем Products.
Рассмотрим этот фрагмент из часто цитируемой базы данных Northwinds:
Имена столбцов являются атрибутами продукта. Записи в полях столбцов также являются атрибутами товара.
Является ли атрибут полем?
Иногда термины field и attribute используются взаимозаменяемо, и для большинства целей это одно и то же. Однако поле описывает конкретную ячейку в таблице, найденной в любой строке, в то время как атрибут описывает характеристику объекта в конструктивном смысле.
В приведенной выше таблице ProductName во второй строке – Chang . Это поле. Если вы обсуждаете продукты в целом, ProductName – это столбец продукта. Это атрибут.
Определение атрибутов
Атрибуты определяются с точки зрения их домена. Домен определяет допустимые значения, которые может содержать атрибут. Это включает в себя его тип данных, длину, значения и другие детали.
Например, домен для атрибута ProductID может указывать числовой тип данных. Атрибут может быть дополнительно определен, чтобы требовать определенной длины или указать, разрешено ли пустое или неизвестное значение.
Перейти к содержанию
На чтение 2 мин Опубликовано 10.01.2015
Содержимое ячейки в Excel может быть самым разнообразным. Это могут быть простые данные, которые хранятся в ячейках, либо атрибуты, которые отвечают за внешний вид. В данном уроке Вы познакомитесь с тремя основными типами данных, которые может хранить ячейка Excel, а также научитесь вводить, удалять и редактировать содержимое в ней.
Любая информация, которую Вы вводите на рабочий лист Excel, хранится в ячейке. Каждая ячейка может содержать определенные данные, включая текст, форматирование, формулы и функции.
Ввод содержимого в ячейку Excel
- Щелкните по ячейке, чтобы выделить ее.
- Введите данные в выделенную ячейку, затем нажмите Enter на клавиатуре. Содержимое появится как в ячейке, так и в строке формул.
Вы можете вводить и редактировать данные прямо в строке формул. Иногда это даже удобней, особенно когда приходится работать с большим объемом информации.
Удаление содержимого из ячейки Excel
- Выберите ячейку, содержащую данные, которые требуется удалить.
- Нажмите клавишу Delete или Backspace на клавиатуре. Содержимое будет удалено.
Клавиша Delete позволяет удалить значения сразу из всех выделенных ячеек. Клавиша Backspace очищает только активную ячейку.
Оцените качество статьи. Нам важно ваше мнение:
На чтение 12 мин. Просмотров 23.4k.
Расчёты с использованием сложных формул, построение сводных таблиц и графиков, написание макросов — это явно не то, с чего началось Ваше знакомство с Excel. На первых порах ваши таблички выглядели примерно вот так (см. рисунок ниже) и самая главная проблема была в том: «Как сделать из чисел проценты, а суммы со знаком рубль/доллар?”
Вспомнили себя? Ну сейчас — то Вы уже профи и умеете цвета заливки менять и когда слышите про формат ячеек начинаете хихикать) Я же написал эту статью, в которой собрал самую полную информацию о форматах ячеек. Ознакомьтесь с оглавлением ниже и поймёте, что вы много не знали.
Содержание
- О чём вообще речь? Покажи примеры!
- Что такое формат чисел?
- Где вы можете найти числовые форматы?
- Общий формат по умолчанию
- Как изменить формат ячейки?
- Как создавать свои собственные форматы
- Как создать собственный формат номера
- Как изменить пользовательский формат
- Структура формата и справочная информация
- Не все разделы необходимы
- Коды для настройки формата
- Пользовательские форматы для дат
- Форматы для отображения времени
- Цифровые форматы для ЦВЕТОВ
- Проверка условий
- Применение форматов в формуле ТЕКСТ
- Примеры с сайтов
О чём вообще речь? Покажи примеры!
В Excel достаточно много уже готовых форматов, однако возможны ситуации, в которых ни один вам не подойдет.
С помощью пользовательских форматов Вы сможете управлять отображением чисел, дат, времени, долей, процентов и других числовых значений. Используя пользовательские форматы, вы сможете:
- для дат показывать день недели и только название месяца,
- миллионы и сотни тысяч показывать без ненужных нулей,
- цветом шрифта обращать внимание пользователей на отрицательные числа или значения с ошибками.
Где вы можете использовать пользовательские форматы чисел?
Самый распространённый вариант использования пользовательских форматов – это непосредственно таблица на листе Excel, но также Вы можете использовать их:
- в сводных таблицах — с помощью настроек поля значения
- при построении графиков (в подписях данных и в настройках осей)
- в формулах (через функцию ТЕКСТ)
Для начала давайте всё же разберёмся с основными понятиями.
Что такое формат чисел?
Пользовательский формат — это специальный код, отвечающий отображение значения в Excel. Например, в таблице ниже показаны 8 разных форматов чисел, примененных к той же дате, 1 мая 2020 года:
Самое главное, что вы должны понимать: в Excel есть два разных понятия: значение в ячейке и его графическое отображение. Вот форматы меняют способ отображения значений, но они не изменяют само значение. Если вернутся к рисунку выше, то значение в ячейке везде одно (01.05.2020), но с помощью формата мы можем по-разному его показывать пользователю.
Где вы можете найти числовые форматы?
На Вкладке Главная вы найдете меню встроенных форматов чисел. Ниже этого меню вправо имеется небольшая кнопка для доступа ко всем форматам, включая пользовательские форматы:
Эта кнопка открывает диалоговое окно «Формат ячеек». Вы найдете полный список форматов чисел, организованных по категориям, на вкладке «Число»:
Примечание. Вы можете открыть диалоговое окно «Формат ячеек» с помощью сочетания клавиш Ctrl + 1
Общий формат по умолчанию
По умолчанию ячейки начинаются с применяемого общего формата. Отображение чисел с использованием формата Общий несколько «вялое». На приведенном ниже рисунке значения в столбцах B и D одни и те же. Просто ширина столбца D меньше и Excel делает корректировки значений.
Видите, что Excel отображает столько знаков после запятой, сколько позволяет ширина ячейки. Он сам округляет десятичные числа и начинает использовать формат научных чисел, когда места в ячейке столбца D ограничено.
Как изменить формат ячейки?
Вы можете выбрать стандартные форматы номеров (общий, номер, валюта, учет, короткий формат даты и др.) на вкладке «Главная» ленты с помощью меню «Формат ячейки».
При вводе данных Excel иногда автоматически меняет числовые форматы. Например, если вы введете допустимую дату, Excel изменится на формат «Дата». Если вы введете процент, равный 5%, Excel изменится на «Процент» и так далее.
Способ 1. Формат по образцу (одноразовое использование)
Способ 2. Формат по образцу (МНОГОразовое использование)
Всё как и в первом способе, только делайте двойной клик по иконке Формат по образцу. Чтобы завершить использование формата по образцу нажмите ESC
Способ 3. Через специальную вставку
Как создавать свои собственные форматы
В нижней части предопределенных форматов вы увидите категорию под названием (все форматы). В этой категории отображается список кодов, которые вы можете использовать для пользовательских форматов чисел, а также область ввода для ввода кодов вручную в различных комбинациях.
Когда вы выберете код из списка, вы увидите его в поле ввода «Тип». Здесь вы можете изменить существующий код или ввести свои коды с нуля. Excel покажет небольшой предварительный просмотр кода, применяемого к первому выбранному значению над областью ввода.
Форматы, которые Вы создаёте самостоятельно хранятся в текущем Excel-файле, а не в Excel вообще. Если вы скопируете значение, отформатированное в соответствии с пользовательским форматом, из одного файла в другой, то формат будет перенесен в книгу вместе со значением.
Как создать собственный формат номера
Чтобы создать собственный формат номера, выполните следующие 4 шага:
- Выберите ячейку (ячейки) со значениями, которые вы хотите отформатировать.
- Нажмите сочетание клавиш Ctrl + 1 > Число > Все форматы
- Введите код формата и просмотрите в поле как будет выглядеть значение в ячейке.
- Нажмите OK, чтобы сохранить и применить только что созданный формат
Как показывает практика, на шаге 3 возникают основные сложности, т.к. пока вам не совсем понятно что писать в поле Тип.
Если вы хотите создать свой собственный формат в существующем формате, сначала примените базовый формат, затем щелкните категорию «Пользовательский» и отредактируйте коды по своему усмотрению.
Далее мы разберём логику прописывания кодов и вы поймёте, что он не так уж и сложен.
Как изменить пользовательский формат
Вы не можете редактировать собственный формат, так как при изменении существующего формата создается новый формат и будет отображаться в списке в категории «Пользовательский». Вы можете использовать кнопку «Удалить», чтобы удалить пользовательские форматы, которые вам больше не нужны.
Предупреждение: после удаления пользовательского формата нет «отмены»!
Структура формата и справочная информация
Пользовательский формат ячейки в Excel имеет определенную структуру. Каждый формат может содержать до четырех разделов, разделенных точкой с запятой:
На первый взгляд всё выглядит сложным, но это только в начале. Чтобы прочитать пользовательский формат, научитесь определять точки с запятой и мысленно анализировать код в этих разделах:
- Положительные значения (зелёным цветом)
- Отрицательные значения (красным цветом перед числом будем ставить -)
- Нулевые значения (будем писать текст «тут нолик»)
- Текстовые значения (будем показывать текст «введи число, а не текст»)
Не все разделы необходимы
Хотя формат может включать до четырех разделов, минимально требуется только один раздел.
- Когда вы определяете только один формат, Excel будет использовать этот формат для всех значений (больше/меньше 0, нуля и текста).
- Если вы установили формат только с двумя разделами, первый раздел используется для положительных чисел и нулей, а второй — для отрицательных чисел.
- Чтобы пропустить раздел, укажите точку с запятой в нужном месте, но не указывайте код формата.
Используя формат ;;; (три точки с запятой), вы можете скрывать значения. Само значение в ячейке будет (сможете использовать в формулах), но его не будет видно.
Коды для настройки формата
Коды для числовых форматов
Определенные символы имеют особое значение в кодах пользовательских номеров. Следующие символы являются ключевыми строительными блоками:
Ноль (0) используется для принудительного отображения нулей, когда число имеет меньше цифр, чем нули в формате. Например, пользовательский формат 0,00 будет показывать нуль как 0,00, 1,1 как 1,10 и ,5 как 0,50.
Знак решетка (#) является заполнителем для необязательных цифр. Когда число имеет меньше цифр, чем # символов в формате, ничего не будет отображаться. Например, пользовательский формат #, ## будет отображать 1,15 как 1,15 и 1,1 как 1,1.
Вопросительный знак (?) Аналогичен нулю, но отображает пробелы для незначащих нулей по обе стороны от разделителя. Используется для выравнивания цифр. Когда знак вопроса занимает место, которое не требуется в количестве, будет добавлено пространство для поддержания визуального выравнивания. Используется также в дробях с переменным количеством знаков.
Пробел ( ) является заполнителем для тысяч разделителей в отображаемом числе. Его можно использовать для определения поведения цифр по отношению к тысячам или миллионам цифр.
Звёздочка (*) используется для повторения символов. Символ, следующий за звездочкой, будет повторяться, чтобы заполнить оставшееся пространство в ячейке.
Подчеркивание (_) используется для добавления пробела в числовом формате. Символ, следующий за символом подчеркивания, определяет, сколько места нужно добавить. Обычным использованием символа подчеркивания является добавление пространства для выравнивания положительных и отрицательных значений, когда числовой формат добавляет круглые скобки только к отрицательным числам. Например, числовой формат «0 _»; (0) » добавляет немного места справа от положительных чисел, чтобы они оставались выровненными с отрицательными числами, заключенными в круглые скобки.
Автоматическое округление
Важно понимать, что Excel будет выполнять «визуальное округление» со всеми форматами пользовательских номеров. Когда число имеет больше цифр, чем заполнители в правой части десятичной точки, число округляется до количества заполнителей. Когда число имеет больше цифр, чем заполнители в левой части десятичной точки, отображаются дополнительные цифры. Это только визуальный эффект — фактические значения не изменяются.
Форматы ячеек для ТЕКСТА
Чтобы отобразить оба текста вместе с цифрами, заключите текст в двойные кавычки («»). Вы можете использовать этот подход для добавления или добавления текстовых строк в формате пользовательского номера, как показано в таблице ниже.
Знаки, которые можно использовать в формате
Помимо знака доллара, есть возможность вводить без кавычек и несколько других значков валют.
Некоторые символы будут работать некорректно в формате ячеек. Например, символы звездочки (*), хеш (#) и процента (%) не могут использоваться непосредственно в пользовательском формате — они не будут отображаться в результате. На помощь приходит обратная косая черта (). Поместив обратную косую черту перед символом, вы можете использовать их в пользовательских форматах:
Пользовательские форматы для дат
Даты в Excel — это просто цифры, поэтому вы можете использовать пользовательские форматы чисел, чтобы изменить способ отображения. Excel многие конкретные коды, которые вы можете использовать для отображения компонентов даты по-разному. На следующей картинке показано, как Excel отображает дату в C5, 14 августа 2019 года, с различными форматами:
Форматы для отображения времени
Показываем время «обычное»
Время в Excel — это дробные части дня. Например, 6:00 – 0,25; 12:00 — 0,5, а 18:00 — 0,75. Вы можете использовать следующие коды в своих форматах для отображения компонентов времени по-разному. Посмотрите ниже как Excel отображает время в D5, 9:35:07, с различными форматами:
м и мм нельзя использовать отдельно в пользовательском формате чисел, так как они конфликтуют с кодом номера месяца в кодах формата даты.
Форматы для «прошедшего» времени
Прошедшее время — это особый случай для отображения значений, превышающих 24 для часов и 60 для минут и секунд. Достаточно добавить квадратные скобки [], чтобы увидеть в ячейке сколько прошло часов, минут и секунд. На следующем экране показано, как Excel показывает прошедшее время, основанное на значении в D5, которое составляет 1,25 дня:
Цифровые форматы для ЦВЕТОВ
Существует два способа определения цвета в формате ячеек. Самый распространённый вариант – написать в квадратных скобках название цвета. Excel знает следующие 8 цветов по имени в цифровом формате:
- [черный]
- [белый]
- [красный]
- [зеленый]
- [синий]
- [желтый]
- [пурпурный]
- [голубой]
Имена цветов должны появляться в скобках.
Если вам мало 8 цветов, то радостная весть в том, что также можно указать цвета по номеру индекса (Цвет1, Цвет2, Цвет3 и т. Д.). Нижеприведенные примеры используют формат пользовательского номера: [ЦветX] 0, где X — номер от 1 до 56
Символы треугольника добавлены только для того, чтобы сделать цвета более удобными для просмотра. Первое изображение отображает все 56 цветов на стандартном белом фоне. На втором изображении изображены те же цвета на сером фоне. Обратите внимание, что первые 8 цветов соответствуют названному списку цветов выше.
Проверка условий
Форматы пользовательских номеров также допускают условия, которые записываются в квадратных скобках, таких как [> 100] или [<= 100]. Когда вы используете условные обозначения в пользовательских числовых форматах, вы переопределяете стандартную структуру >0, <0, 0, текст. Например, чтобы отображать значения ниже 100 красным цветом, вы можете использовать:
[Красный][<100]0;0
Для отображения значений, больших или равных 100 в синем, вы можете расширить формат следующим образом:
[Красный][<100]0;[Синий][>=100]0
Если оставить <100 и >100 (без равно), тогда в ячейке с числом 100 увидите ###########. Это значит, что Excel не может определить как отображать 100. Увеличение ширины столбца не исправит ситуации, нужно менять формат, добавлять >=
Чтобы более легко применять цвета и другие атрибуты ячеек, такие как цвет заливки и т.д., Вы захотите использовать Условное форматирование
Напишите в сообщения сообщества «хочу УФ» и я направлю в ответ видеоурок по работе с данным инструментом. Следите за группой, я готовлю статью с большим количеством примеров использования УФ.
Применение форматов в формуле ТЕКСТ
Хотя большинство форматов чисел применяются непосредственно к ячейкам на листе, вы также можете применять форматы чисел внутри формулы с помощью функции ТЕКСТ. Например, в ячейке A1 написана формула СЕГОДНЯ(). Ниже два варианта получения названия месяца.
- в B2 с помощью формата
- в B4 с помощью формулы ТЕКСТ(A1;»ММММ») (м — вводим на русском ЗАГЛАВНЫМИ)
ВАЖНО: результатом функции ТЕКСТ всегда является текстовое значение, поэтому вы можете соединять результат формулы с другими текстовыми значениями: =«Отчёт продаж за :» & ТЕКСТ(A1; «ММММ»)
Примеры с сайтов
https://excel2.ru/articles/polzovatelskiy-chislovoy-format-v-ms-excel-cherez-format-yacheek
А какие вы используете нестандартные форматы?
Какие испытываете сложности в их создании?
На чтение 6 мин Просмотров 1.4к. Опубликовано 21.03.2022
Именованные диапазоны помогут вам быстрее обрабатывать отдельные элементы таблицы, например я, часто ими пользуюсь.
Итак, начнём!
Содержание
- Что такое именованные диапазоны в Excel?
- Плюсы использования именованных диапазонов
- Используем имена в функциях
- Прописать имя гораздо быстрее чем диапазон ячеек
- Функции становятся динамическими
- Как создать именованный диапазон
- С помощью поля «Имя»
- Функция «Создать из выделенного»
- Важная информация
- Поиск нужного именованного диапазона
- Просмотр списка созданных именованных диапазонов.
- Автоподстановка имени диапазона
- Редактируем уже созданный именованный диапазон
- Горячие клавиши
- Динамический именованный диапазон
- Как это работает?
Что такое именованные диапазоны в Excel?
Итак, если вам необходимо часто обрабатывать какие-либо конкретные элементы таблицы — вы можете просто «назвать» их и выделять уже по названию (имени).
Грубо говоря, мы можем выделить какую-либо ячейку или диапазон ячеек и дать ему имя. В таком случае, выбрав имя, мы сможем быстро указать какие элементы необходимо задействовать.
Допустим, у нас есть такая табличка:
Например, здесь мы можем создать диапазон Дат, имен продавцов и продаж.
Вам может показаться, что это совершенно бесполезно, но я уверяю вас — вы ошибаетесь. Когда речь идет о больших объемах данных — именованные диапазоны одна из лучших функций!
Как я уже сказал, мы можем создать диапазон ячеек из каждого столбика:
А также присвоить ей конкретное имя.
Плюсы использования именованных диапазонов
Давайте рассмотрим плюсы использования этой функции.
Используем имена в функциях
Итак, допустим вы создали именованный диапазон. Теперь вы можете использовать его даже в функциях!
К примеру, так можно посчитать сумму всех значений диапазона:
=СУММ(SALES)
Для нашей таблички, мы можем использовать следующие функции, если создадим диапазон каждого столбика:
- Сумма продаж тех продавцов, которые продали более 500 позиций: =СЧЁТЕСЛИ(Sales,»>500″);
- Сумма продаж продавца Tom: =СУММЕСЛИ(SalesRep, «Tom»,Sales);
- Чистая прибыль продавца Joe:
=СУММЕСЛИ(SalesRep, "Joe",Sales)*Комиссия
В общем, ничего сложного нет, мы просто заменяем ссылки на ячейки в формулах именем диапазона.
Прописать имя гораздо быстрее чем диапазон ячеек
Но, главный плюс, я считаю — увеличение скорости работы с формулами. В случае если вы не используете именованный диапазон, вам в каждой новой формуле нужно указывать диапазон ячеек. С именованным диапазоном все проще!
Вы начинаете вводить его имя и Excel сам понимает что вы хотите написать, таким образом ошибки исключены:
Функции становятся динамическими
Если вы использовали определенные значения при расчетах, а после поменяете эти значения — результат не изменится.
А если же вы используете именованный диапазон — все будет пересчитываться каждый раз!
Как создать именованный диапазон
Есть 3 метода, давайте рассмотрим каждый.
Функция «Присвоить имя»
Пошаговая инструкция:
- Выделите ячейку (или диапазон);
- Щелкните на «Формулы» -> «Присвоить имя»;
- Итак, укажите имя и проверьте диапазон;
- Подтвердите.
Готово!
С помощью поля «Имя»
- Выделите ячейку (или диапазон);
- А теперь просто впишите имя в поле «Имя»;
- Диапазон будет создан для всего файла Excel (а не для отдельного листа). Если вам нужно создать диапазон только одного листа, вам нужен рассмотренный ранее вариант.
Функция «Создать из выделенного»
Этим вариантом выгодно пользоваться, когда вам нужно создать сразу несколько именованных диапазонов. Например, как в нашем случае, мы хотим создать 3 диапазона из каждого столбика нашей таблички.
Пошаговая инструкция:
- Выделите ячейку (или диапазон);
- Щелкните на «Формулы» -> «Создать из выделенного»;
- В открывшемся окне, выберите ту опцию, которая соответствует положению заголовков в вашей табличке. Грубо говоря, укажите где Excel должен искать заголовки таблички (в нашем случае — «в строке выше»);
Таким образом, он создал три диапазона с названиями наших столбиков, меняя пробел на «_»;
Важная информация
Есть несколько моментов, которые вам нужно знать о именованных диапазонах:
- Первым символом имени может быть только буква, «_» или «». Во всех остальных случаях будет ошибка;
- Именем не может быть диапазон ячеек;
- А также в именах не может быть пробелов, вы можете использовать «_»;
- Регистр не имеет значения;
- Максимальная длина имени — 255 символов.
Поиск нужного именованного диапазона
Бывает такое, что при работе с табличкой вы создаете очень много диапазонов. А потом забываете как называется тот, который нужен.
Что же делать?
Давайте я покажу.
Просмотр списка созданных именованных диапазонов.
Пошаговая инструкция:
- Щелкните на «Формулы» -> «Использовать в формуле»;
- Далее — «Вставить имена…»;
Итак, открылся список всех диапазонов.
Автоподстановка имени диапазона
Если вы хотя бы помните как начиналось имя нужного диапазона — вы можете использовать этот вариант.
Редактируем уже созданный именованный диапазон
Пошаговая инструкция:
- Щелкните на «Формулы» -> «Диспетчер имен»;
- В открывшемся окне будут все созданные диапазоны и их описания’
- Щелкните на «Изменить…»;
- Поменяйте то что нужно;
- Подтвердите.
Горячие клавиши
Какие есть горячие клавиши:
- Список всех диапазонов — F3;
- Открыть «Диспетчер имен» — CTRL + F3;
- Создать диапазон из выделенного — CTRL + SHIFT + F3.
Динамический именованный диапазон
До сих пор мы рассмотрели только те именованные диапазоны, которые не будут менять свою область.
Если мы создали B1:B20 диапазон, то он всегда будет ссылаться на эту область.
Грубо говоря, если у вас появятся новые ячейки в столбике, наш именованный диапазон не будет учитывать и включать в себя их. Это не очень удобно, что же делать?
В Excel можно создать и автоматически изменяемый именованный диапазон. Если я добавлю несколько новых ячеек в столбик, он будет включать в себя и их.
Для этого мы будем вызывать функцию ИНДЕКС.
Допустим у вас есть такая табличка:
Пошаговая инструкция:
- Щелкните на «Формулы» -> «Присвоить имя»;
- В открывшемся окне укажите данные на ваш выбор, а в поле «Диапазон» введите — =$A$2:ИНДЕКС($A$2:$A$100,СЧЁТЕСЛИ($A$2:$A$100,»<>»&»»)
- Подтвердите.
Готово!
Как это работает?
Чтобы понять как эта «фишка» работает, нужно знать как работает функция ИНДЕКС.
Чаще всего ИНДЕКС используют для получения значения из какой-либо ячейки.
Формула которую мы использовали при создании диапазона:
=$A$2:ИНДЕКС($A$2:$A$100,СЧЁТЕСЛИ($A$2:$A$100,"<>"&""))
ИНДЕКС($A$2:$A$100,СЧЁТЕСЛИ($A$2:$A$100,»<>»&»») -> выдаст нам значение последнего элемента столбика.
Но если функция будет выглядеть так: (=$A$2:INDEX($A$2:$A$100,COUNTIF($A$2:$A$100,»<>»&»»))) то она вернет порядковый номер последней ячейки, а не значение.
В нашем случае, это — $A$2:$A$11.
И соответственно если мы создадим новые ячейки — все будет пересчитано.
Обратите внимание:
Эта конструкция сработает только в том случае, если в ячейках идущих друг за другом не будет пустых. Если вам необходимо больший диапазон в функции ИНДЕКС — укажите его.
Также можно использовать функцию СМЕЩ, но она будет рассчитываться каждый раз, когда данные изменяются и может замедлять работу с программой.
Время на прочтение
7 мин
Количество просмотров 16K
Итак, продолжаем разговор. На всякий случай уточню, что начало здесь.
Про строковые значения и метод их хранения я уже вскользь упоминал в первой части, а сейчас поговорим подробнее. Представим, что у нас есть таблица, заполненная строковыми данными, и что она большая. При этом крайне маловероятно, что все значения в ней будут уникальны. Некоторые из них нет-нет, да повторятся где-нибудь в разных частях таблицы. Хранить такой массив «как есть» внутри XML-разметки листа нерационально с точки зрения ресурсов ПК. Поэтому все строковые значения вынесены в отдельный файл, %file%/xl/sharedStrings.xml. Часть его, которая нас интересует, выглядит, допустим, так:
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="4" uniqueCount="3">
<si><t>Вася</t></si>
<si><t>Петя</t></si>
<si><t>Саша</t></si>
</sst>
Обратите внимание на атрибуты тега <sst /> «count» и «uniqueCount»: их значения различаются. Дело в том, что в книге одну из строк я использовал дважды. При этом атрибуты не обязательны, то есть если их убрать, то Excel ошибки не выдаст, но при сохранении файла нарисует опять.
Здесь же можно сказать, что здесь, внутри тега <si /> можно играть с настройками шрифта. Для этого используется доработанная напильником система пробегов, применяемая в MS Word (до него мы еще доберемся). Выглядит это примерно так:
<si>
<r>
<t xml:space="preserve">Мама </t>
</r>
<r>
<rPr>
<b/>
</rPr>
<t>мыла</t>
</r>
<r>
<rPr>
<sz val="18"/>
</rPr>
<t xml:space="preserve"> раму</t>
</r>
</si>
Обратите внимание: в корневой тег <si/> в предыдущем примере был встроен непосредственно тег <t/>, содержавший текст. Здесь же он обернут тегом <r/>, то есть Run; по-русски его принято назвать «пробег». Пробег — это, если в двух словах — кусок текста, имеющий одинаковые стилевые настройки.
В этом примере строковое значение содержит 3 пробега. Чтобы было удобнее их рассматривать, я, пожалуй, вынесу их отдельными сорсами.
Первый:
<r>
<t xml:space="preserve">Мама </t>
</r>
Этот пробег не содержит секции <rPr/>, поэтому использует стилевые настройки ячейки, в которой находится. В нем интересно другое: атрибут xml:space=«preserve». Дело в том, что по умолчанию что Excel, что Word обрезают концевые пробелы со всех пробегов. Может показаться, что в этом случае в месте стыка пробегов всегда должна получаться примерно такая картина: ВасяПетя. Но по опыту общения с тем же MS Word мы знаем, что это не так. Из-за чего? Вот как раз из-за xml:space=«preserve».
Второй:
<r>
<rPr>
<b/>
</rPr>
<t>мыла</t>
</r>
Здесь нет атрибута xml:space=«preserve». Нам без разницы, что Excel сделает с концевыми пробелами, которых нет. Зато есть блок <rPr/>. В принципе, в него можно поместить любые настройки шрифта, которые только есть в Excel. Я же сделал всего один, чтобы не раздувать объем примера.
Третий:
<r>
<rPr>
<sz val="18"/>
</rPr>
<t xml:space="preserve"> раму</t>
</r>
А здесь у нас есть и блок настроек шрифта и сохранение концевых пробелов.
Ну и еще коротенькая ремарка. Если есть необходимость сделать многострочную запись в ячейке, то здесь в строке просто будет обычный символ переноса, chr(10). Сам атрибут многострочности ячейки расположен в файле разметки листа. В однострочной ячейке символ переноса будет проигнорирован. Excel просто сделает вид, что его нет.
Перейдем в папку %file%/xl/worksheets. Здесь, как говорилось выше, каждый лист, содержащийся в книге, представлен файлом .xml.
Файл разметки листа содержит следующие ключевые элементы (и, что важно, желательно располагать их именно в таком порядке):
1. Тег <dimension>. Необязателен. Служит, насколько я смог понять, для указания системе размера занятой области, то есть на сколько прорисовывать строки и столбцы
2. Тег </sheetViews>. Необязателен, но иногда полезен. Я его использовал для указания на необходимость закрепления верхней строки: это полезно для больших отчетов. Выглядит это примерно так:
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<pane ySplit="1" topLeftCell="A2" activePane="bottomRight" state="frozen"/>
</sheetView>
</sheetViews>
Здесь надо дать пояснение. Собственно закрепление строки — тег <pane />. И вот какие здесь использованы атрибуты:
- ySplit — показывает количество закрепленных строк. Для закрепления столбцов есть аналогичный атрибут xSplit;
- topLeftCell — указание левой верхней ячейки видимой по умолчанию НЕзакрепленной области;
- activePane — указание местонахождения НЕзакрепленной области. В руководствах сказано, что этот атрибут регулирует, с какой стороны будет НЕзакрепленная область. Правда, попробовав разные значения, я почему-то получил одинаковый результат. Как вариант «by default» я для себя выбрал bottomRight;
- state — указатель состояния закрепленной области. Для простого закрепления строки используется значение frozen
3. Тег <sheetFormatPr />. Пример:
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
Интересен нам здесь в основном атрибут defaultRowHeight, то есть высота столбца по умолчанию. Стандартный, привычный нам вариант — 15 у.е. Если назначить его, скажем, 30 у.е., то строки, для которых высота не указана отдельно, станут в 2 раза выше. Однако, для того чтоб применить значение, отличное от дефолтного, необходимо указать атрибут customHeight со значением «true». Выглядит это примерно так:
<sheetFormatPr defaultRowHeight="30" customHeight="true" x14ac:dyDescent="0.25"/>
4. Тег </cols>. Помогает установить ширину столбцов отличную от дефолтной. В заполненном виде выглядит примерно так:
<cols>
<col min="1" max="2" width="9" customWidth="1"/>
<col min="3" max="4" width="16" customWidth="1"/>
<col min="5" max="6" width="66" customWidth="1"/>
<col min="7" max="8" width="42" customWidth="1"/>
</cols>
Вложенные теги </col> обозначают не каждый один столбец, как могло показаться, а группу столбцов, идущих подряд и имеющих единую ширину.
- Атрибут min — первый столбец группы;
- Атрибут max — последний столбец группы;
- Атрибут width — ширина столбца из группы;
- Атрибут customWidth — флаг применения кастомной ширины, без него ширина все равно будет дефолтной;
5. Тег <sheetData> — это, собственно, зона, где хранится содержимое ячеек, или, в зависимости от типа, ссылок на него. В среднем выглядит он так:
<sheetData>
<row r="1">
<c r="A1" s="3" t="s"><v>0</v></c>
<c r="B1" s="3" t="s"><v>1</v></c>
<c r="C1" s="3" t="s"><v>2</v></c>
</row>
<row r="2">
<c r="A2" s="2"><v>1</v></c>
<c r="B2" s="2"><v>37539</v></c>
<c r="C2" s="2" t="s"><v>14</v></c>
</row>
<row r="3">
<c r="A3" s="2"><v>2</v></c>
<c r="B3" s="2"><v>33227</v></c>
<c r="C3" s="2" t="s"><v>21</v></c>
</row>
</sheetData>
Как видно, в тег <sheetData> вложены теги <row> с атрибутом «r», обозначающим фактический (а не порядковый) номер строки: надо помнить, что, скажем, строка 1 может быть пустой, а строка 2 — нет.
«Букв, что ли, пожалели?» — спросите вы. «Экономия памяти» — ответит Microsoft. Если вспомнить про ограничение в 16 миллионов с гаком ячеек, становится понятна их мотивация. Выходит, в теории один (!) лишний символ в имени атрибута может привести к миллионам лишних символов при чтении всего файла.
В тег <row /> вложены теги <с /> — ячейки. В примере видно, что основных атрибутов у ячейки три:
- r — адрес ячейки;
- s — стиль ячейки. Вспоминаем первую часть данной статьи: в файле styles.xml есть раздел <cellXfs />, в котором перечислены зарегистрированные стили оформления ячеек. атрибут «s» тега <с /> — как раз ссылка на элемент этого списка, начиная с 0;
- t — указание на необходимость обращения к таблице строковых значений в файле sharedStrings.xml. Если атрибут указан — обращаемся, если нет — пишем как есть то, что в теле тега. Примечательно, что при попытке вписать в тело тега текст без указания данного атрибута, Excel при открытии файла ругнется, но послушно перенесет нашу фразу туда, где ей место (хотя я на его сообразительность рекомендую не полагаться и сразу писать строки в sharedStrings.xml);
Когда я говорил про файл sharedStrings.xml, я упомянул, что многострочные ячейки помечаются в файле разметки листа. Делается это, к примеру, так:
<row r="1" spans="1:9" ht="45" customHeight="1" x14ac:dyDescent="0.3">
<c r="A1" s="2" t="s"><v>3</v></c>
</row>
То есть, строго говоря, нам надо указать кастомную высоту ячейки и поставить флаг применения этой самой кастомной высоты.
6. Тег <mergeCells />. Как мы знаем, в Excel есть возможность объединения ячеек. Все объединенные ячейки на листе перечислены здесь. В заполненном виде тег выглядит примерно так:
<mergeCells count="40">
<mergeCell ref="G15:I15"/>
<mergeCell ref="E3:F3"/>
<mergeCell ref="E4:F4"/>
</mergeCells>
Как видно, одна объединенная ячейка обозначена одним тегом <mergeCell /> с единственным атрибутом ref, задающим диапазон объединения.
7. Тег <autoFilter />. Фильтры, которые так любят видеть в отчетах наши пользователи. В заполненном виде тег выглядит так:
<autoFilter ref="A1:N1"/>
Нетрудно понять, что атрибут «ref» задает зону, занимаемую активными ячейками фильтров.
Ну и «на сладкое» в файле идут настройки страницы для печати. Вот пример из одного моего файла:
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
<pageSetup paperSize="9" orientation="portrait" r:id="rId1"/>
Тег <pageMargins /> задает поля, а тег <pageSetup /> — предпочтительные настройки бумаги.
В комментариях к первой части была просьба поговорить собственно о редактировании этого чуда техники средствами PL/SQL. Следующая часть будет именно об этом.