3 Работа с табличным процессором Microsoft Excel |
|
Содержание |
|
Структура документа Excel……………………………………………………………………….. |
2 |
Типыданных Excel ………………………………………………………………………………….. |
3 |
Механизмавтозаполнения………………………………………………………………………. |
4 |
Вычисления в Excel………………………………………………………………………………….. |
6 |
Функции в Excel ………………………………………………………………………………………. |
7 |
Относительные и абсолютные адреса ячеек……………………………………………… |
8 |
Построение диаграмм…………………………………………………………………………….. |
9 |
Приложение Windows MS Excel позволяет формировать и выводить на печать документы, представленные в табличном виде, выполнять расчеты на основании исходных данных и др.
Принципиально структура интерфейса Excel 2007 мало отличается от Word 2007. В ней также присутствуют Панель быстрого доступа, лента с вкладками, Кнопка «Office» и др.. Меню Кнопки «Office» включает в себя почти те же команды, что и меню Кнопки «Office» текстового редактора MS Word 2007.
Свои особенности по сравнению с Word 2007 имеют команда Сохранить и подменю Сохранить как, что обусловлено спецификой Excel 2007. Сохранять документы можно в самых разных форматах. По умолчанию Excel 2007 предлагает сохранить документ в формате XLSX (прежние версии программы с этим форматом могут работать при наличии специальной утилиты). При необходимости можно выбрать тип файла, совместимый с предыдущими версиями (XLS). Файл с рабочей книгой Excel, содержащий макросы, следует сохранять в формате XLSM, который позволяет сохранить документ вместе с макросами.
Контекстное меню Excel 2007 в общем случае включает в себя следую-
щие команды: Вырезать, Копировать, Вставить (из буфера обмена), Специальная вставка, Вставить…, Удалить, Очистить содержимое, Вставить примечание, Формат ячеек. Выбрать из раскрывающегося списка и Гиперссылка.
Команда Специальная вставка предназначена для добавления в документ объектов из других приложений Windows. Команда Вставить… предназначена для добавления в документ ячеек, строк либо столбцов. При выполнении данной команды открывается окно Добавление ячеек, в котором указывают, какой именно элемент требуется добавить: ячейку, строку или столбец. Команда Удалить… работает с точностью до наоборот — в окне Удаление ячеек необходимо указать, какой элемент следует удалить. Командой Очистить содержимое
можно при необходимости оперативно удалить содержимое активной ячейки либо группы предварительно выделенных ячеек.
Рабочая область Excel 2007 называется элементом пользовательского интерфейса, включающим в себя ячейки, строки, столбцы и листы рабочей книги, а также строку формул. Все основные действия по созданию и редактированию документов Excel 2007 выполняют в рабочей области.
Рабочая книга Excel 2007 — это файл, который создается, редактируется и сохраняется средствами Excel 2007. Основной структурной единицей рабочей книги является рабочий лист.
Рабочий лист — основной элемент рабочей книги, предназначенный для ввода, редактирования и хранения данных, а также для выполнения вычислений. Основной структурной единицей рабочего листа является ячейка.
По умолчанию в состав каждой книги Excel 2007 включено три рабочих листа, которым изначально присвоены названия Лист1, Лист2 и Лист3. Количество листов книги можно изменять. Названия столбцов по умолчанию обозначаются буквами английского алфавита, а каждая строка имеет уникальный номер. Любую строку или любой столбец можно по своему усмотрению добавлять, удалять либо перемещать, причем одновременно со всей содержащейся информацией. Высоту строки и ширину столбца можно менять.
Одним из главных структурных элементов рабочей области является ячейка. В данном случае ячейка — это наименьшая (элементарная) часть электронной таблицы, предназначенная для ввода и хранения информации и расположенная на пересечении строки и столбца. Совокупность нескольких ячеек образует диапазон.
Каждая ячейка имеет уникальные координаты (их еще называют адресом ячейки). Адрес ячейки определяется с помощью строк с буквами и цифрами, которые расположены соответственно вверху и слева рабочей области. Например, на рисунке 3.1 курсор установлен в ячейку с адресом С4.
Рисунок 3.1 — Ячейка с координатами С4
2
Помимо классического стиля адресации ячеек на листе Excel (такой стиль ссылок иногда называют «стилем А1»), существует еще и альтернативная система адресации, называемая «стилем R1C1». В этой системе и строки и столбцы обозначаются цифрами. Адрес ячейки С4 в такой системе будет выглядеть как R4C3 (R=>row=> строка, С=>column=>столбец). Стиль R1C1 удобно использовать при поиске ошибок в формулах, при работе с таблицами, содержащими большое число столбцов (имена столбцов в таких таблицах обозначаются двумя буквами), а также при написании макросов. Включить или отключить этот стиль адресации можно следующей цепочкой команд: кнопка Офис (в Excel 2010 – меню Файл) — Параметры Excel — Формулы — Стиль ссылок R1C1.
Диапазоном ячеек называют группу смежных ячеек в прямоугольной области. Диапазон задаётся указанием адресов ячейки в левом верхнем углу области и адресом ячейки в нижнем правом углу области, между которыми ставится двоеточие, например диапазон А3:В5 содержит 6 ячеек таблицы Excel.
Типы данных Excel
Информация в ячейках может быть трех типов — число, текст или фор-
мула.
Числовые данные — это число, введенное в ячейку. Перед числом могут быть символы или «минус». Символ «плюс» обычно не набирается. Знак «минус» для отрицательных чисел набирается обязательно. В качестве разделителя целой и дробной части числа используются, в зависимости от настроек операционной системы, символы «,» (запятая) или «.» (точка). В русифицированных версиях Excel используется символ запятая. Например, 5,06. Числа также могут быть заданы в виде рациональной дроби и в экспоненциальной форме.
При задании числа в виде дроби используется символ косая черта «/», который также называется слэш (slash). Перед числом в виде дроби необходимо набирать «0». Например, 0 1/3 задает число 0,333333333333333 (Excel хранит в мантиссе числа 15 цифр).
Для обозначения мантиссы числа в экспоненциальной форме используются латинские буквы «Е» или «е», после которых задается порядок числа. Например, число «пять с половиной миллионов» может быть задано в виде 5,5е6.
Данные, определяющие даты или денежные суммы, рассматриваются как числа. Ячейки, содержащие числовые данные, могут использоваться в вычислениях. По умолчанию, числовые данные выравниваются по правой границе ячейки.
Формулы — содержимое ячейки рассматривается как формула, если оно начинается со знака равенства «=». Если ячейка содержит формулу, то это ячейка вычисляемая. Значение ячейки с формулой, как правило, зависит от других ячеек таблицы и при изменении данных в этих ячейках результат вычисле-
3
ния такой формулы автоматически пересчитывается. Обычно формулы в ячейках не отображаются, а вместо них воспроизводится результат вычислений по данной формуле. Саму формулу при этом можно увидеть и отредактировать в строке формул. Однако Excel позволяет включить режим отображения формул в ячейках таблицы. В Excel 2007 это делается «горячей» клавишей Ctrl+`. Символ «апостроф» расположен в левом верхнем углу (в русской раскладке буква
«Ё»).
Текстовые данные представляют собой строку текста произвольной длины. Программа Excel воспроизводит такие данные точно в том же виде, в каком они были введены. Ячейка, содержащая текстовые данные не может использоваться в вычислениях. К текстовым данным относится все что не является числом или формулой. Например, при задании в качестве разделителя целой и дробной части числа символа «точка» число 5.06 будет восприниматься как текст. При использовании русской буквы «Е» для экспоненциальной формы числа Excel также воспримет данные в виде текста. Текстовые данные, по умолчанию, выравниваются по левой границе ячейки.
Механизм автозаполнения
В программе реализована возможность быстрого ввода данных в ячейки с помощью механизма автозаполнения. Если клетки одной строки или столбца содержат одинаковые данные или содержат названия месяцев или дней недели, то следует использовать автозаполнение. Наиболее простой способ выглядит так: ввести значение в ячейку, подвести указатель мыши к правому нижнему углу ячейки (этот угол помечен жирной точкой) чтобы указатель принял вид небольшого крестика. Затем, нажав и удерживая левую кнопку мыши, перетащить указатель в том направлении, в котором необходимо заполнить ячейки. Как только отпускается кнопка мыши, все ячейки выделенного диапазона будут заполнены (в них будет скопировано значение, введенное в первую ячейку). Кроме этого, возле последней ячейки выделенного диапазона отобразится
кнопка , после нажатия на которую, открывается меню, изображенное на рисунке 3.2.
4
Рисунок 3.3 – Окно «Прогрессия»
Рисунок 3.2
В данном меню можно указать подходящий вариант автозаполнения ячеек. При выборе варианта Копировать ячейки содержимое первой ячейки выделенного диапазона будет скопировано во все остальные ячейки. Если указывается вариант Заполнить, то все ячейки будут заполнены числовой последовательностью в порядке возрастания либо месяцами или днями недели, если в первой ячейки был введен такой текст. Например, если в первую ячейку диапазона введено значение 1, то при выборе варианта Заполнить значения следующих ячеек сформируются так: 2, 3, 4, 5 и т. д. При установленном значении Заполнить только форматы во все ячейки диапазона будет скопирован только формат первой ячейки, а при выборе варианта Заполнить только значения — только значение первой ячейки (форматы останутся прежними). При заполнении ячеек числами арифметической прогрессии с шагом отличающемся от 1, следует использовать либо диалоговое окно Прогрес-
сия команды Заполнить
(значок ) группы Ре-
дактирование вкладки
Главная ленты (рисунок 3.3), либо использовать следующий прием. В первой ячейке набрать первый
член прогрессии, в соседней ячейке – второй член прогрессии. Выделить эти ячейки и перетащить указатель мыши в виде крестика до нужной ячейки. Заполнение ячеек числами геометрической прогрессии можно осуществить только через диалоговое окно Прогрессия команды Заполнить.
5
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Группировка данных в Microsoft Excel
Смотрите также и закрывается/открывается списокВы также можете настроить ползунокКонструкторГоризонтальная иерархия с подписями поле и растяните на том жещелкните стрелку подщелкните языке) .На вкладкеВ спискеВ появившемся окошке выбираем, сворачивать и разворачивать,. пользователей это неПри работе с таблицами, ниже, а не
графическом элементе SmartArtПрозрачность
Настройка группировки
не отображается, выделите. рамку на новое уровне. командойИерархияЕсли вы хотите проиллюстрировать
- ДанныеПри каждом изменении в что именно нам
- нажимая на знакиОткрывается небольшое окно, в устраивает, так как в которые входит выше. перемещать поля, изменять
- или введите число графический элемент SmartArt.Примечание: место.Удаление поляДобавить фигуруи дважды щелкните иерархических отношений горизонтально(Data), кликните по(At each change нужно разъединить: строки «минус» и «плюс» котором нужно дать удобнее, когда наименование большое количество строкПример прилагаю. их размер, добавив в поле рядомВыберите нужную комбинацию цветов. Чтобы изменить макет SmartArt,Чтобы фигура перемещалась сЧтобы удалить поле, щелкните. макет рисунка (например, или вертикально, можноГруппировать in) выберите
или столбцы. После соответственно. ответ, что мы
Группировка по строкам
размещается сверху. Для или столбцов, актуальным
- Alex_ST заливку или эффекти с ним. ЗначениеСовет: можно также выбрать очень маленьким шагом, его границу иЕсли вкладкаГоризонтальная иерархия создать графический элемент
- (Group).Company этого, жмем наВ Эксель можно создавать хотим сгруппировать – этого нужно снять
- становится вопрос структурирования: Sub Groups_Tuning() ‘Настройка добавлять фотографию. прозрачности можно изменять (ПРИМЕЧАНИЕ.) При наведении указателя нужный параметр в
- удерживайте нажатой клавишу нажмите клавишу DELETE.Работа с рисунками SmartArt). SmartArt, который используетНажмите на знак «. Этот столбец мы кнопку не только группы строки или столбцы. галочку с соответствующего данных. В Экселе
группы и структуры:При использовании PowerPoint можно от 0 (полная мыши на эскиз разделе
CTRL и нажимайтеПримечания:или
Группировка по столбцам
Для ввода текста выполните макет иерархии, например
- – будем использовать, чтобы«OK» первого порядка, но Ставим переключатель в
- пункта. В общем, этого можно достичь итоги в строках добавить анимацию к непрозрачность, значение по можно просмотреть, какРабота с рисунками SmartArt
- клавиши со стрелками. Конструктор одно из следующих иерархия с подписями.«.Результат: структурировать нашу таблицу.
. и вложенные. Для позицию каждый пользователь может путем использования группировки над данными, итоги иерархии, чтобы обратить
Создание вложенных групп
умолчанию) до 100 изменяются цвета вна вкладкеИзменение макета другой иерархииЕсли вам нужно добавитьне отображается, выделите действий. Иерархия графически представляетЧтобы удалить структуру, выделитеВ спискеТеперь выделенные группы будут этого, нужно в«Строки» настроить данные параметры соответствующих элементов. Этот в столбцах слева внимание на каждое
% (полная прозрачность). графическом элементе SmartArt.КонструкторЩелкните правой кнопкой мыши поле в иерархии, графический элемент SmartArt.В области текста щелкните ряд упорядоченный группирований любую ячейку изОперация расформированы, а структура
Разгруппирование
развернутом состоянии материнскойи жмем на под себя. Кроме инструмент позволяет не
- от данных поле, каждую ветвьСтиль SmartArt — этоВ графическом элементе SmartArtв группе иерархии, на которые попробуйте добавить полеВыполните одно из указанных элемент
- людей или элементов набора данных и(Use function) выберите листа примет свой группы выделить в кнопку того, тут же только удобно структурировать
On Error Resume или каждый уровень сочетание различных эффектов, щелкните правой кнопкой
Макеты вы хотите изменить перед после, выше ниже действий.[Текст] в системе. С на вкладкеКоличество первоначальный вид. ней определенные ячейки,«OK» можно включить автоматические данные, но и Next иерархии. например стилей линий,
мыши строку или
lumpics.ru
Структурирование данных в Excel
. При выборе варианта и нажмите кнопку или ниже выделенногоЧтобы вставить поле наи введите содержимое. помощью графического элементаДанные
- (Count).Как видим, создать группу которые вы собираетесь.
- стили, установив галочку временно спрятать ненужныеWith ActiveSheet.OutlineНажмите кнопку иерархии рисунка рамок или трехмерных
- поле границы, которые макета можно предварительноИзменить макет поля, чтобы определить том же уровне,Копирование текста из другой SmartArt в Excel,(Data) нажмите кнопку
- Поставьте галочку напротив столбцов или строк сгруппировать отдельно. ЗатемНа этом создание группы около данного наименования.
- элементы, что позволяет.SummaryRow = xlAbove SmartArt, который нужно
- эффектов, которые можно нужно изменить и просмотреть, как будет.
- место требуется применить что и выбранное программы или расположения, Outlook, PowerPoint илиПромежуточный итогCompany довольно просто. В следует провести одну завершено. Для того, После того, как сконцентрировать своё внимания
.SummaryColumn = xlLeft анимировать. применить к полям выберите команду выглядеть графический элементВыберите элемент новое поле. Это
поле, но после щелкните элемент
- Word, можно создать(Subtotal). Затем кликните(см. рисунок ниже). то же время, из тех процедур,
- чтобы свернуть её настройки выставлены, кликаем на других частяхEnd WithНа вкладке
- графического элемента SmartArtФормат фигуры SmartArt.
- Иерархия простое исправление распространенных него, выберите команду[текст] иерархию и включать поНажмите после проведения данной какие были описаны достаточно нажать на по кнопке
таблицы. Давайте выясним,End Sub
Анимация
для придания им
.
office-guru.ru
Создание иерархии
Быстро добавить конструктор качество, а затем выполните ошибок графических элементовДобавить фигуру послев области текста в листе, сообщениеУбрать всеОК процедуры пользователь может выше, в зависимости знак «минус».«OK» как произвести группировкуAlex_STв группе профессионального, неповторимого вида.Чтобы изменить цвет границы, оформления и польский одно из следующих SmartArt.. и затем вставьте
электронной почты, презентации(Remove All).. значительно облегчить себе от того, соЧтобы заново развернуть группу,. в Экселе.: А если неАнимацияЩелкните графический элемент SmartArt, выберите пункт в графический элемент действий:Вам нельзя автоматически соединитьЧтобы вставить поле на текст. или документа.Урок подготовлен для Вас
Результат: работу с таблицей, столбцами вы работаете нужно нажать наНа этом настройка параметровСкачать последнюю версию
макросом, тощелкните стиль SmartArt которогоЦвет линии SmartArt, можно изменитьДля отображения иерархических отношений два поля верхнего том же уровне,Примечание:Важно:
Создание иерархии
-
командой сайта office-guru.ruЧтобы свернуть группу ячеек, особенно если она или со строками. знак «плюс». группировки в Эксель Excel
-
ДАННЫЕ — ГРУППААнимировать нужно изменить., нажмите кнопку цвета и Применение сверху вниз и уровня в строке что и выбранное
-
Если область текста не Если вы хотите создатьИсточник: http://www.excel-easy.com/examples/outlining-data.html
-
нажмите знак « сильно большая. ВПосле этого вложенная группаАналогичным образом проводится и
-
завершена.Прежде чем перейти к И СТРУКТУРА -и выберите вариантВ разделеЦвет стиля SmartArt иерархии.
сгруппированные иерархическом порядке, макеты иерархии, например поле, но перед отображается, щелкните элемент
-
организационную диаграмму, создайтеПеревел: Антон Андронов–
этом случае также будет готова. Можно группировка по столбцам.Выполним группировку данных по группировке строк или
-
-
Добавление и удаление полей в иерархии
НАСТРОЙКА
-
Последовательно по ветвямРабота с рисунками SmartArt, а затем
-
Можно также Добавить нажмите кнопкуГоризонтальная иерархия
-
ним, выберите команду управления. макет организационной диаграммыАвтор: Антон Андронов» (минус). Можно использовать может помочь создание создавать неограниченное количествоСправа или слева от строкам. столбцов, нужно настроить
сам снять обе.на вкладке щелкните нужный цвет. эффекты, например свечения,Иерархия с подписями
-
, однако можно сымитироватьДобавить фигуру перед
-
Щелкните поле в графическом с помощью графическогоПримечание: цифры, чтобы свернуть вложенных групп. Провести подобных вложений. Навигацию группируемых данных добавляем
-
Добавляем строчку над группой этот инструмент так, «гульки»Примечание:КонструкторЧтобы изменить тип границы сглаживания или трехмерные
-
. это действие, добавив. элементе SmartArt и элемента SmartArt.Мы стараемся как
или развернуть группы разгруппирование так же между ними легко новый столбец и столбцов или под чтобы конечный результат -
Libera При копировании иерархию, котораяв группе фигуры, щелкните эффекты.Чтобы показать группы встроенной
поле в графическийЧтобы вставить поле на введите свой текст.Примечание:
-
можно оперативнее обеспечивать
по уровню. К просто, как и проводить, перемещаясь по
указываем в нём ней, в зависимости
-
был близок к: В настройках группировки имеет анимация, примененнаяСтили SmartArtТип линииК полям в графических сверху вниз и элемент SmartArt и один уровень вышеПримечание: Снимки экрана в этой
-
вас актуальными справочными примеру, нажмите сгруппировать данные. цифрам, расположенным слева соответствующее наименование группы. от того, как ожиданиям пользователя. уберите галочки к нему навыберите стиль.и задайте нужные
-
элементах SmartArt можно иерархии внутри каждой
-
затем Рисование линии выбранное поле, нажмите Для достижения наилучших результатов
-
статье съемки в материалами на вашем2Автор: Максим Тютюшев или сверху листаВыделяем ячейки в столбцах, планируем выводить наименованиеПереходим во вкладкуopenid.mail.ru/mail/vlad3622340
-
другой слайд, анимация
-
Чтобы отобразить другие стили параметры. применять цветовые вариации группы информации, нажмите
-
для подключения поля. кнопку используйте это действие Office 2007. Если языке. Эта страница
, чтобы отображались только
-
Структурирование делает информацию более в зависимости от которые собираемся сгруппировать, и итоги. В«Данные»: Ух ты! Круто!
-
также копируется. SmartArt, нажмите кнопкуЩелкните правой кнопкой мыши из цвета темы. кнопку
-
Добавление поля из областиДобавить фигуру над после добавления всех у вас другая переведена автоматически, поэтому подуровни.
-
удобной для просмотра. того, что сгруппировано кроме столбца с новой ячейке вводим.Спасибо, Алексей, отличноopenid.mail.ru/mail/vlad3622340
-
Дополнительно границу фигуры иЩелкните графический элемент SmartArt,Табличная иерархия
-
текста:. необходимых полей. версия, представления могут ее текст может
-
Примечание: В этом примере строки или столбцы. наименованием. Кликаем на произвольное наименование группы,В нижнем левом углу
-
работает!: Доброго вечера!. выберите команду цвет которого нужно.Поместите курсор в началоНовое поле займетДобавление поля немного отличаться, но содержать неточности иНажмите мы научимся подсчитыватьЕсли вы хотите переформатировать кнопку
Изменение цветов иерархии
подходящее к ней блока инструментовА если вЧто-то подобное было,Если вкладкаФормат фигуры изменить.Нажмите кнопку текста, куда вы выбранного поля, а
Щелкните графический элемент SmartArt, если не указано грамматические ошибки. Для1
-
строки со связанными или просто удалить«Группировать»
-
по контексту.«Структура» этом же файле но поиском неРабота с рисунками SmartArt.В разделеИерархический список хотите добавить фигуру.
выбранное поле и в который нужно иное функциональные возможности нас важно, чтобы, чтобы отображать только данными и сворачивать
-
группу, то её
.Выделяем строки, которые нужнона ленте расположена надо обратно вернуть нашёл.или
Изменение цвета или стиля линии
-
Щелкните областьРабота с рисунками SmartArtдля отображения иерархическихВведите нужный текст в все поля непосредственно добавить поле. совпадает с. эта статья была
-
итоги, или группу столбцов. нужно будет разгруппировать.В открывшемся окошке на сгруппировать, кроме итоговой маленькая наклонная стрелочка. настройки группировки, то
-
Символ +/- (открытие/закрытиеКонструкторЗаливкана вкладке отношений между группами.
Изменение цвета фона поля в иерархии
-
новой фигуре и под каждой понижениеЩелкните существующее поле, ближайшееНа вкладке вам полезна. Просим
-
3Для начала отсортируем данныеВыделяем ячейки столбцов или этот раз ставим строки. Переходим во
-
Кликаем по ней. надо выполнить какой-то сгруппированных строк) находитсяне отображается, выделите
-
и выберите вариантКонструкторДля отображения иерархических отношений нажмите клавишу ВВОД. на один уровень. к месту вставкиВставка вас уделить пару, чтобы отобразить всё. по столбцу строк, которые подлежат переключатель в позицию
Применение стиля SmartArt к иерархии
вкладкуОткрывается окно настройки группировки. другой макрос? у них снизу. графический элемент SmartArt.Сплошная заливкав группе по горизонтали, нажмите Чтобы добавить отступ
-
Чтобы вставить поле на нового поля.в группе
-
секунд и сообщить,Чтобы свернуть группу столбцов,Company разгруппированию. Жмем на«Столбцы»«Данные» Как видим по
openid.mail.ru/mail/vlad3622340 Т.е. управляет вышележащимиПримечания: .
Стили SmartArt кнопку для фигуры, нажмите один уровень нижеВ разделеИллюстрации
помогла ли она выполните следующие действия:
-
. кнопку. Жмем на кнопку. умолчанию установлено, что
-
: Точно! Благодарю! строками. Как сделать, Нажмите кнопкунажмите кнопкуГоризонтальная иерархия
Анимация иерархии
клавишу TAB, а выбранного поля, выберитеРабота с рисунками SmartArtнажмите кнопку вам, с помощьюВыделите столбцыНа вкладке
-
«Разгруппировать»«OK»На ленте в блоке
-
итоги и наименованияПомню же, что чтобы открывались/закрывались нижележащие(ПРИМЕЧАНИЕ.) При наведении указателяЦветИзменить цвета. чтобы сместить ее команду
на вкладкеSmartArt кнопок внизу страницы.AДанные, расположенную на ленте
support.office.com
Создание структуры
. инструментов
по столбцам располагаются как-то просто вопрос строки?
мыши на эскизи выберите нужный.Для отображения иерархических отношений влево — клавишиДобавить фигуру подКонструктор
. Для удобства такжеи(Data) нажмите кнопку в блоке настроекГруппа готова. Аналогично, как
«Структура»
справа от них, решался.Это же удобнее, становится видно, как цвет.Если вкладка по горизонтали и
SHIFT+TAB..
в группе
В коллекции
приводим ссылку на
B
Промежуточный итог
«Структура» и при группированиикликаем по кнопке
а по строкамПросто первый раз слева от названия
изменяется стиль SmartArtЧтобы указать степень прозрачности
Работа с рисунками SmartArt метками в иерархическомПеремещение поля в иерархии
Новое поле будет добавленоСоздать рисунок
Выбор графического элемента SmartArt оригинал (на английском
.(Subtotal).. столбцов, её можно«Группировать» – внизу. Многих
столкнулся с группировкой. списка щёлкаешь +/-
в рисунке SmartArt. фонового цвета, переместитеили
порядке, щелкнитеЧтобы переместить поле, щелкните
planetaexcel.ru
после другого поля
Время на прочтение
25 мин
Количество просмотров 34K
Недавно мне понадобилось встроить в CRM возможность создания отчетов в Excel посредством PHP, но готовые решения были сильно громоздкими. Поэтому я решил написать собственную библиотеку для работы с Excel файлами через PHP. Но информации о внутренности Excel было очень мало и мне пришлось собирать ее по крупинкам, иногда методами тыка, проб и ошибок разбирал работу некоторых элементов.
На написание данной статьи меня натолкнули уже существующие статьи от @Lachrimae.
Но дополнять ее в комментариях — очень громоздко и неудобно. Поэтому я решил поделиться всеми свои знаниями в новой статье, и если это поможет кому-то, то мои старания будут более, чем не напрасны.
Оглавление:
-
Структура файлов;
-
Разбор файла _rels/.rels;
-
Разбор docProps/app.xml;
-
Разбор docProps/core.xml;
-
Разбор xl/_rels/workbook.xml.rels;
-
Разбор xl/printerSettings/printerSettings1.bin;
-
Разбор xl/theme/theme1.xml;
-
Разбор xl/worksheets/_rels/sheet1.xml.rels;
-
Разбор xl/worksheets/sheet1.xml;
-
Разбор xl/caclChain.xml;
-
Разбор xl/sharedStrings.xml;
-
Разбор xl/styles.xml;
-
Разбор xl/workbook.xml;
-
Разбор [Content_Types].xml;
-
Завершение.
Структура файлов
Так как Excel — это архив файлов .xml, то мы можем его распаковать и увидеть следующее содержание:
Некоторые файлы могут отсутствовать, такие как: xl/worksheets/_rels/sheet.xml.rels, xl/calcChain.xml, xl/printerSettings/printerSettings1.bin и sharedString.xml
В папках xl/worksheets, xl/printerSettings и xl/worksheets/_rels могут быть по несколько файлов.
Давайте разберёмся, для чего все эти файлы, начнём по порядку:
_rels/.rels — описание связей файлов, касаемых самой работы Excel;
docProps/app.xml — описание и настройки приложения Excel;
docProps/core.xml — здесь записывается имя создателя файла, время создания и последнего редактирования файла;
xl/_rels/workbook.xml.rels — перечень и описание зависимостей файлов, используемых в книге;
xl/printerSettings/printerSettings1.bin — описание настроек для печати листа;
xl/theme/theme1.xml — описание стилей приложения;
xl/worksheets/_rels/sheet1.xml.rels — описание связей листа xl/worksheets/sheet1.xml с другими документами;
xl/worksheets/sheet1.xml — описание всего происходящего на листе, который находится на первой позиции в списке листов книги. Название листа и название файла никак не связаны, файл всегда называется sheet1, sheet2 и т.д. На каждый лист приходится один такой файл;
xl/caclChain.xml — цепочка вычислений. Конструкция, указывающая порядок вычислений ячеек в книге в последний раз;
xl/sharedStrings.xml — перечень строковых значений, используемых во всей книге;
xl/styles.xml — описание стилей, используемых во всей книге;
xl/workbook.xml — описание настроек книги и перечень используемых листов;
[Content_Types].xml — описание всех файлов и их типов.
Разбор файла _rels/.rels
Если открыть файл — мы увидим следующее содержание:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
</Relationships>
В первой строке у нас объявляется тип документа — xml с его версией, кодировкой и автономности.
standalone (автономность) — Это объявление указывает, содержит ли внешнее подмножество DTD (Document Type Definition — определение типа документа) какие-либо объявления, которые могут повлиять на текущее содержимое документа.
Вторая строчка — открывающий тег для описания связей документов. Атрибут xmlns — означает, что используется пространство имен, от сюда и название самого атрибута — xml NameSpace.
Далее идут 3 строки связей с документами. У каждого есть атрибуты: Id — уникальное имя для связи, Type — ссылка на стандарт, описывающий нужный нам тип документа, Target — путь к исполняемому файлу.
Разбор docProps/app.xml
Содержимое данного файла примерно такая (не все элементы могут присутствовать и иметь тот же вид, что и у меня):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
<Application>Microsoft Excel</Application>
<DocSecurity>0</DocSecurity>
<ScaleCrop>false</ScaleCrop>
<HeadingPairs>
<vt:vector size="2" baseType="variant">
<vt:variant>
<vt:lpstr>Worksheets</vt:lpstr>
</vt:variant>
<vt:variant>
<vt:i4>1</vt:i4>
</vt:variant>
</vt:vector>
</HeadingPairs>
<TitlesOfParts>
<vt:vector size="1" baseType="lpstr">
<vt:lpstr>Лист 1</vt:lpstr>
</vt:vector>
</TitlesOfParts>
<Company></Company>
<LinksUpToDate>false</LinksUpToDate>
<SharedDoc>false</SharedDoc>
<HyperlinksChanged>false</HyperlinksChanged>
<AppVersion>14.0300</AppVersion>
</Properties>
Первая строка нам уже знакома.
Во второй строке открывающий тег properties и эта строка похожа на рассмотренную нами ранее.
Третья строка содержит название приложения. В данном случае — Microsoft Excel (что не удивительно). Данную строку лучше не изменять, ибо приложение упадет.
Следующая строка:
<DocSecurity>0</DocSecurity>
Означает безопасность документа и в зависимости от числа имеет следующий посыл:
0 — Документ не защищен
1 — Документ защищен паролем.
2 — Рекомендуется открывать документ только для чтения.
4 — Документ принудительно открыт только для чтения.
8 — Документ заблокирован для заметок.
Строка:
<ScaleCrop>false</ScaleCrop>
указывает режим отображения эскиза документа. Установите для этого элемента значение TRUE, чтобы включить масштабирование эскиза документа на экране. Установите для этого элемента значение FALSE, чтобы включить обрезку эскиза документа, чтобы отображались только те разделы, которые соответствуют отображаемому значению (из документации microsoft).
Далее открывается тег HeadingPairs, внутри которого описаны группы частей документа и количество частей в каждой группе. Эти части являются не частями документа, а концептуальными представлениями разделов документа.
Внутри HeadingPairs мы имеем 1 векторный контент, в котором имеются 2 его части (подробнее о векторах и baseType можно почитать в документации microsoft).
Первая часть означает, что мы описываем листы в книге, а во второй части указываем количество этих листов.
Следующий тег — TitlesOfParts. Он описывает наименования частей документа. в данном случае — названия листов в книге. Здесь также указывается количество частей векторного контента.
В теге Company можно записать название компании.
Следующий элемент — LinksUpToDate — указывает, актуальны ли гиперссылки в документе. Установите для этого элемента значение TRUE, чтобы показать, что гиперссылки обновлены. Установите для этого элемента значение FALSE, чтобы указать, что гиперссылки устарели (из документации microsoft).
Элемент SharedDoc указывает, является ли этот документ в настоящее время общим для нескольких производителей. Если для этого элемента установлено значение TRUE, производителям следует проявлять осторожность при обновлении документа.
HyperlinksChanged указывает, что одна или несколько гиперссылок в этой части были обновлены исключительно в этой части производителем. Следующий производитель, который откроет этот документ, обновит отношения гиперссылок новыми гиперссылками, указанными в этой части.
Тег AppVersion указывает версию используемого приложения Excel при создании файла
Разбор docProps/core.xml
Содержимое файла примерно таково:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dc:creator>Виктор</dc:creator>
<dcterms:created xsi:type="dcterms:W3CDTF">2006-09-16T00:00:00Z</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2006-09-16T00:00:00Z</dcterms:modified>
</cp:coreProperties>
Первая строка нам уже знакома.
Во второй строке открывающий тег cp:coreProperties и эта строка похожа на рассмотренную нами ранее. Внутри него описываются свойства приложения:
dc:creator — Имя создателя документа;
dcterms:created — дата и время создания файла;
dcterms:modified — дата и время последнего изменения файла;
Разбор xl/_rels/workbook.xml.rels
Примерное содержимое файла:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>
<Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain" Target="calcChain.xml"/>
</Relationships>
Этот файл похож на раннее рассмотренный нами, только здесь уже описываются зависимости для файлов, которые используются непосредственно в книге.
Здесь записаны зависимости всех листов в книге, файла со строковыми значениями, цепочками вычислений и прочих файлов (мы разберем эти файлы дальше)
Разбор xl/printerSettings/printerSettings1.bin
Это файл, содержащий код в бинарном виде. Чтобы разобрать этот файл нужно описать много вещей про бинарники, а, чтобы научить писать правильно такой файл, потребуется много сил, времени и много текста. Да и в целом не вижу смысла вам работать с этим файлом. (честно говоря, я сам поверхностно знаком с этой темой).
Разбор xl/theme/theme1.xml
У меня не было надобностей разбирать этот файл, поэтому пока не буду описывать его работу. Но если кому-то понадобится (не знаю зачем) подробный разбор этого файла — я постараюсь сделать это.
Разбор xl/worksheets/_rels/sheet1.xml.rels
Содержимое этого файла может быть следующим:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings" Target="../printerSettings/printerSettings1.bin"/>
</Relationships>
Здесь описана одна зависимость с файлом xl/printerSettings/printerSettings1.bin — настройками для печати.
Разбор xl/worksheets/sheet1.xml
Начинается самое интересное и большое в этой статье.
Начинается такой файл с обычного объявления типа документа xml и некоторых настроек:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
<dimension ref="A1"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="J10" sqref="J10"/>
<pane ySplit="1" topLeftCell="A2" activePane="bottomRight" state="frozen"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
<cols>
<col min="1" max="1" width="12" customWidth="1"/>
<col min="3" max="5" width="14" customWidth="1"/>
<col min="6" max="7" width="31" customWidth="1"/>
</cols>
<sheetData/>
<mergeCells count="40">
<mergeCell ref="G15:I15"/>
<mergeCell ref="E3:F3"/>
<mergeCell ref="E4:F4"/>
</mergeCells>
<autoFilter ref="A1:N1"/>
<printOptions headings="1" gridLines="1"/>
<pageMargins left="0.7" right="0.7" top="0.7" bottom="0.7" header="0.3" footer="0.3"/>
<pageSetup paperSize="9" pageOrder="overThenDown" orientation="portrait" blackAndWhite="1" draft="1" cellComments="atEnd" errors="NA" r:id="rId1"/>
</worksheet>
Строка третья означает размер экспортируемого диапазона (с какой по какую ячейку находятся данные).
В теге sheetView — selection описывается выделенная клетка (или диапазон клеток).
Атрибут activeCell — активная ячейка, sqref — выделенная ячейка или диапазон ячеек.
такая строка может выглядеть и вот так:
<selection activeCellId="2" sqref="A1:B2 B2:C3 A1:C3"/>
Здесь уже вместо атрибута activeCell стоит activeCellId, потому что в атрибуте sqref мы видим несколько диапазонов. исходя из этого выясняем, что активный диапазон является A1:C3. на изображении ниже показано, как выглядит такой вариант выделения ячеек.
Про тег pane, sheetFormatPr и cols хорошо рассказано в статье от @Lachrimae:
Собственно, закрепление строки — тег <pane />. И вот какие здесь использованы атрибуты:
ySplit — показывает количество закрепленных строк. Для закрепления столбцов есть аналогичный атрибут xSplit;
topLeftCell — указание левой верхней ячейки, видимой по умолчанию НЕзакрепленной области;
activePane — указание местонахождения НЕзакрепленной области. В руководствах сказано, что этот атрибут регулирует, с какой стороны будет НЕзакрепленная область. Правда, попробовав разные значения, я почему-то получил одинаковый результат. Как вариант «by default» я для себя выбрал bottomRight;
state — указатель состояния закрепленной области. Для простого закрепления строки используется значение frozen
Тег <sheetFormatPr />. Пример:
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
Интересен нам здесь в основном атрибут defaultRowHeight, то есть высота столбца по умолчанию. Стандартный, привычный нам вариант — 15 у.е. Если назначить его, скажем, 30 у.е., то строки, для которых высота не указана отдельно, станут в 2 раза выше. Однако, для того чтоб применить значение, отличное от дефолтного, необходимо указать атрибут customHeight со значением «true». Выглядит это примерно так:
<sheetFormatPr defaultRowHeight="30" customHeight="true" x14ac:dyDescent="0.25"/>
Тег </cols>. Помогает установить ширину столбцов отличную от дефолтной. В заполненном виде выглядит примерно так:
Вложенные теги </col> обозначают не каждый один столбец, как могло показаться, а группу столбцов, идущих подряд и имеющих единую ширину.
Атрибут min — первый столбец группы;
Атрибут max — последний столбец группы;
Атрибут width — ширина столбца из группы;
Атрибут customWidth — флаг применения кастомной ширины, без него ширина все равно будет дефолтной;
Тег sheetData — описание содержимого ячеек и их настроек.
здесь структура такова:
<sheetData>
<row r="1" spans="1:5" ht="18" customHeight="1" x14ac:dyDescent="0.25">
<c r="A1">
<v>1</v>
</c>
<c r="B1" t="s">
<v>0</v>
</c>
<c r="C1" t="s">
<v>1</v>
</c>
<c r="D1" t="s">
<v>2</v>
</c>
<c r="E1">
<v>1</v>
</c>
</row>
<row r="4" spans="1:5" x14ac:dyDescent="0.25">
<c r="A4" t="s">
<v>2</v>
</c>
<c r="B4">
<f>SUM(A1:E1)</f>
<v>2</v>
</c>
</row>
</sheetData>
В Excel это будет выглядеть вот так:
Давайте разбираться, что же все-таки в коде происходит.
Мы видим два тега row — это наши строки. У каждой есть атрибут r — это номер строки. Атрибут spans означает сколько столбцов задействовано, dyDescent — вертикальное расстояние в пикселях между ячейками. Атрибут ht устанавливает высоту всей строки в пунктах, а тег customHeight говорит, что мы используем нестандартную высоту строки.
В теге row есть теги c — это ячейки в строке. у каждого тега есть атрибут r — означающий позицию ячейки. Но атрибут t — присутствует не у всех, потому что запись t=»s» — означает, что у ячейки установлен тип строки, а у кого этого атрибута нет — тип устанавливается стандартный — числовой. Еще у тегов c может присутствовать атрибут s, в котором записывается номер применяемого к ячейке стиля из файла xl/styles.xml (мы доберемся до него позже).
Внутри тегов c есть теги v — это наши значения, записываемые в ячейки. Но не все так просто. Те значения, которые находятся в теге c без атрибута t — те значения записываются без изменений, т.е. записывается в ячейку само число из тега v, а вот те значения, которые находятся в теге c с атрибутом t — уже обрабатываются по-другому: в теге v записан порядковый номер строки в файле xl/sharedStrings.xml (мы доберемся до него позже). В ячейку уже записывается строка, которая имеет порядковый номер, записанный в теге v.
Но мы можем заметить, что одна ячейка имеет помимо тега v еще тег f. Это тег с формулой, в данном случае формула означает: сумма ячеек от A1 до E1. А в теге v записан уже посчитанный ответ. Делать это не обязательно, но если не записать — то при открытии документа excel предложит сохранить изменения, т.к. он сам автоматически посчитал и записал этот результат.
С тегом sheetData разобрались, идем дальше.
Про теги mergeCells и autoFilter снова обратимся к статье от @Lachrimae:
Тег <mergeCells />.
Как мы знаем, в Excel есть возможность объединения ячеек. Все объединенные ячейки на листе перечислены здесь. В заполненном виде тег выглядит примерно так:
<mergeCells count="40">
<mergeCell ref="G15:I15"/>
<mergeCell ref="E3:F3"/>
<mergeCell ref="E4:F4"/>
</mergeCells>
Как видно, одна объединенная ячейка обозначена одним тегом <mergeCell /> с единственным атрибутом ref, задающим диапазон объединения.
Тег <autoFilter />. Фильтры, которые так любят видеть в отчетах наши пользователи. В заполненном виде тег выглядит так:
<autoFilter ref="A1:N1"/>
Нетрудно понять, что атрибут ref задает зону, занимаемую активными ячейками фильтров.
Тег printOptions — параметры печати. Атрибут headings — означает, что будут печататься заголовки, а атрибут gridLines — что будут печататься линии сетки.
Тег pageMargins задает поля сверху, снизу, справа, слева, у заголовков и у подвала для печатаемой страницы.
Тег pageSetup предпочтительные настройки бумаги, опять же, для печати.
Атрибут paperSize — устанавливает размер бумаги.
Используемые значения:
Значение |
Описание |
---|---|
16 |
10 в. x 14 в. |
17 |
11 в. x 17 в. |
8 |
A3 (297 мм x 420 мм) |
9 |
A4 (210 мм x 297 мм) |
10 |
A4 Small (210 мм x 297 мм) |
11 |
A5 (148 мм x 210 мм) |
12 |
B4 (250 мм x 354 мм) |
13 |
A5 (148 мм x 210 мм) |
24 |
Лист размеров C |
25 |
Лист размеров D |
20 |
Конверт #10 (4-1/8 в. x 9-1/2 в.) |
21 |
Конверт #11 (4-1/2 в. x 10-3/8 in.) |
22 |
Конверт #12 (4-1/2 в. x 11 in.) |
23 |
Конверт #14 (5 в. x 11-1/2 в.) |
19 |
Конверт #9 (3-7/8 в. x 8-7/8 in.) |
33 |
Конверт B4 (250 мм x 353 мм) |
34 |
Конверт B5 (176 мм x 250 мм) |
35 |
Конверт B6 (176 мм x 125 мм) |
29 |
Конверт C3 (324 мм x 458 мм) |
30 |
Конверт C4 (229 мм x 324 мм) |
28 |
Конверт C5 (162 мм x 229 мм) |
31 |
Конверт C6 (114 мм x 162 мм) |
32 |
Конверт C65 (114 мм x 229 мм) |
27 |
DL конверта (110 мм x 220 мм) |
36 |
Конверт (110 мм x 230 мм) |
37 |
Envelope Monarch (3-7/8 in. x 7-1/2 in.) |
38 |
Конверт (3-5/8 в. x 6-1/2 in.) |
26 |
Лист размеров E |
7 |
Executive (7-1/2 в. x 10-1/2 in.) |
41 |
Немецкий юридический фанфолд (8-1/2 в. x 13 in.) |
40 |
Немецкий юридический фанфолд (8-1/2 в. x 13 in.) |
39 |
Стандартный фанфолд США (14-7/8 в. x 11 in.) |
14 |
Фолио (8-1/2 в. x 13 in.) |
4 |
Книга (17 в. x 11 in.) |
5 |
Юридический (8-1/2 в. x 14 in.) |
1 |
Письмо (8-1/2 в. x 11 in.) |
2 |
Letter Small (8-1/2 in. x 11 in.) |
18 |
Примечание (8-1/2 в. x 11 in.) |
15 |
Quarto (215 мм x 275 мм) |
6 |
Заявление (5-1/2 в. x 8-1/2 in.) |
3 |
Таблоид (11 в. x 17 in.) |
256 |
Пользовательский |
Атрибут pageOrder — направление печати. Если значение «overThenDown» — то будет печататься слева направо, потом нижняя часть снова слева направо и т.д. Если такого атрибута нет — то печататься будет сначала вся левая сторона сверху-вниз, потом та часть, что справа и т.д.
Атрибут orientation — задает ориентацию листов. «portrait» — портретная (вертикальная) ориентация, «landscape» — альбомная (горизонтальная) ориентация.
Атрибут blackAndWhite — если установлена 1 ил true — лист будет напечатан в черно-белом варианте.
Атрибут draft — если установлена 1 ил true — лист будет напечатан без графики.
Атрибут cellComments — печать комментариев к ячейкам. Используемые значения:
-
AsDisplayed — Распечатать Комментарии Как отображается;
-
AtEnd — Печать в конце;
-
None — Не печатать.
Атрибут errors — Печать обработки ошибок.
-
Blank — Показать ошибки ячейки как пустые;
-
Dash — Ошибки ячейки Dash;
-
Displayed — Отображение ошибок ячейки;
-
NA — Отображает «NA».
Атрибут r:id — идентификатор настроек.
Разбор xl/caclChain.xml
По традиции, начнем с содержимого файла:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<calcChain xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<c r="B4" i="1"/>
</calcChain>
Здесь нам важна строка 3. видим тег c — наша ячейка, у нее есть атрибут r — адрес ячейки. Индексный атрибут i указывает индекс листа, с которым связана ячейка.
Разбор xl/sharedStrings.xml
Обратимся к статье от @Lachrimae:
Представим, что у нас есть таблица, заполненная строковыми данными, и что она большая. При этом крайне маловероятно, что все значения в ней будут уникальны. Некоторые из них нет-нет, да повторятся где-нибудь в разных частях таблицы. Хранить такой массив «как есть» внутри XML-разметки листа нерационально с точки зрения ресурсов ПК. Поэтому все строковые значения вынесены в отдельный файл, /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 просто сделает вид, что его нет.
Добавлю: каждый тег si имеет порядковый номер, начиная с 0. Он нигде не записывается. Этот номер и записывается в файле xl/worksheets/sheet1.xml в теге sheetData, который мы рассматривали ранее.
Разбор xl/styles.xml
Снова обратимся к статье от @Lachrimae. Буду добавлять от себя дополнительную информацию.
Как нетрудно догадаться, здесь хранится информация об оформлении ячеек. Причем в угоду оптимизации, хранится она в достаточно интересном виде. Файл состоит из следующих секций:
1. Шрифты:
<fonts count="2" x14ac:knownFonts="1">
<font>
<sz val="11"/>
<color theme="1"/>
<name val="Calibri"/>
<family val="2"/>
<scheme val="minor"/>
</font>
<font>
<b/>
<sz val="11"/>
<color theme="1"/>
<name val="Calibri"/>
<family val="2"/>
<charset val="204"/>
<scheme val="minor"/>
</font>
</fonts>
Как можно понять, здесь перечислены только уникальные стили оформления текста, использованные в книге. Каждый тег — один стиль. Вложенные теги — особенности стиля, такие как полужирное написание (тег <b/>), кегль (<sz/>) и другие.
На месте тега <b/> можно написать:
-
<i/> — курсив;
-
<u/> — подчеркнутый,
либо <u val=»double»/> — двойное подчеркивание; -
<strike/> — зачеркнутый;
-
<vertAlign val=»superscript»/> — надстрочный текст,
либо <vertAlign val=»subscript»/> — подстрочный текст;
либо сочетание нескольких тегов.
Если хотите установить цвет шрифта какой-нибудь свой (возьмем #123456), то в теге color вместо атрибута theme пишем rgb и вставляем hex-код цвета, должно получиться вот так:
<color rgb="123456"/>
2. Заливка ячеек:
<fills count="2">
<fill>
<patternFill patternType="none"/>
</fill>
<fill>
<patternFill patternType="gray125"/>
</fill>
</fills>
Как видно, первый вариант — без заливки вообще, а второй — сплошная заливка библиотечного цвета «gray125».
Здесь тот же принцип с установкой своего цвета, только немного по-другому записывается:
<fill>
<patternFill patternType="solid">
<fgColor rgb="123456"/>
<bgColor indexed="64"/>
</patternFill>
</fill>
Тег fgcolor — отвечает за цвет переднего плана, а bgcolor — за цвет заднего плана (indexed=»64″ — черный цвет).
У тега patternFill атрибут patternType может иметь следующие значения:
-
none — Нет заливки;
-
solid — Сплошная заливка; (пример выше)
-
darkGray — Серый 75%;
Пример
<fill> <patternFill patternType="darkGray"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки Здесь мы можем наблюдать, что цвета расположены в сетку
-
mediumGray — Серый 50%;
Пример
<fill> <patternFill patternType="mediumGray"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки Здесь сетка уже поменьше и цвет из тега fgcolor уже меньше прорисовывается.
-
lightGray — Серый 25%;
Пример
<fill> <patternFill patternType="lightGray"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки Здесь сетка еще меньше и цвет из тега fgcolor еще меньше прорисовывается.
-
gray125 — Серый 12.5%;
Пример
<fill> <patternFill patternType="gray125"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки Посыл, думаю, понятен
-
gray0625 — Серый 0.025%
Пример
<fill> <patternFill patternType="gray0625"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkHorizontal — Полосатый цвет с горизонтальными линиями;
Пример
<fill> <patternFill patternType="darkHorizontal"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkVertical — Полосатый цвет с вертикальными линиями;
Пример
<fill> <patternFill patternType="darkVertical"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkDown — Полосатый цвет с диагональными линиями сверху-вниз;
Пример
<fill> <patternFill patternType="darkDown"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkUp — Полосатый цвет с диагональными линиями снизу-вверх;
Пример
<fill> <patternFill patternType="darkUp"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkGrid — Диагональный клетчатый;
Пример
<fill> <patternFill patternType="darkGrid"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки В этом варианте сетки четко видно, клетки цветов одинаковые и их поровну. Как шахматная доска
-
darkTrellis — Толстый диагональный клетчатый;
Пример
<fill> <patternFill patternType="darkTrellis"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightHorizontal — Полосатый цвет с горизонтальными тонкими линиями;
Пример
<fill> <patternFill patternType="lightHorizontal"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightVertical — Полосатый цвет с вертикальными тонкими линиями;
Пример
<fill> <patternFill patternType="lightVertical"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightDown — Полосатый цвет с диагональными тонкими линиями сверху-вниз;
Пример
<fill> <patternFill patternType="lightDown"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightUp — Полосатый цвет с диагональными тонкими линиями снизу-вверх;
Пример
<fill> <patternFill patternType="lightUp"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightGrid — Тонкий горизонтальный клетчатый;
Пример
<fill> <patternFill patternType="lightGrid"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightTrellis — Тонкий диагональный клетчатый;
Пример
<fill> <patternFill patternType="lightTrellis"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки
Можно еще заливку сделать градиентом:
-
Горизонтальный, вертикальный, диагональный:
Примеры
2 цвета:
<fill> <gradientFill degree="90"> <stop position="0"> <color rgb="0000FF"/> </stop> <stop position="1"> <color rgb="FFFFFF"/> </stop> </gradientFill> </fill>
градиент 2 цвета Атрибут degree — угол поворота, изменяя который можно менять направление градиента.
3 цвета:
<fill> <gradientFill degree="90"> <stop position="0"> <color rgb="0000FF"/> </stop> <stop position="0.5"> <color rgb="FFFFFF"/> </stop> <stop position="1"> <color rgb="FF0000"/> </stop> </gradientFill> </fill>
Градиент 3 цвета
-
От угла:
Примеры
От левого верхнего угла
<fill> <gradientFill type="path"> <stop position="0"> <color rgb="0000FF"/> </stop> <stop position="1"> <color rgb="FFFFFF"/> </stop> </gradientFill> </fill>
Градиент от угла От правого верхнего угла — в тег gradientFill добавить атрибуты left=»1″ right=»1″, чтобы получилось:
<gradientFill left="1" right="1" type="path">
От левого нижнего угла — в тег gradientFill добавить атрибуты bottom=»1″ top=»1″;
От правого нижнего угла — в тег gradientFill добавить атрибуты bottom=»1″ top=»1″ left=»1″ right=»1″;
-
От центра:
<fill> <gradientFill bottom="0.5" top="0.5" right="0.5" left="0.5" type="path"> <stop position="0"> <color rgb="0000FF"/> </stop> <stop position="1"> <color rgb="FFFFFF"/> </stop> </gradientFill> </fill>
Градиент от центра
3. Границы:
<borders count="2">
<border>
<left/>
<right/>
<top/>
<bottom/>
<diagonal/>
</border>
<border>
<left style="thin">
<color indexed="64"/>
</left>
<right style="thin">
<color indexed="64"/>
</right>
<top style="thin">
<color indexed="64"/>
</top>
<bottom style="thin">
<color indexed="64"/>
</bottom>
<diagonal/>
</border>
</borders>
Как видно, одно наименование здесь состоит из пяти элементов, 4 основных границы и диагональная, то есть все то, что можно настроить через GUI самого Excel.
Атрибут style означает стиль границы и может иметь следующие значения:
-
thin – тонка сплошная;
-
hair – мелкая пунктирная;
-
dotted – точечная пунктирная;
-
dashed – пунктирная линия;
-
dashDot – пунктир линия точка;
-
dashDotDot – пунктир линия точка точка;
-
double – двойная сплошная;
-
medium – сплошная средней толщины;
-
mediumDashed – пунктирная линия средней толщины;
-
mediumDashDot – пунктир линия точка средней толщины;
-
mediumDashDotDot – пунктир линия точка точка средней толщины;
-
slantDashDot – косая пунктир линия точка средней толщины;
-
thick – сплошная большой толщины.
Для установки цвета границы используйте уже известную нам запись:
<color rgb="123FFF"/>
Чтобы установить диагональную границу, нужно в тег diagonal записать атрибуты:
-
diagonalDown=»1″ — для границы сверху-вниз;
-
diagonalUp=»1″ — для границы снизу вверх.
Должно получиться:
<diagonal diagonalDown="1"/>
<diagonal diagonalUp="1"/>
<diagonal diagonalDown="1" diagonalUp="1"/>
Ну и не забудьте внутри тега diagonal записать цвет для границы — тег color.
4. Стили ячеек:
<cellXfs count="4">
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
<xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1" applyAlignment="1">
<alignment wrapText="1"/>
</xf>
<xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyBorder="1" applyAlignment="1">
<alignment horizontal="center" vertical="center"/>
</xf>
<xf numFmtId="0" fontId="1" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
<alignment horizontal="center" vertical="center"/>
</xf>
</cellXfs>
А вот здесь надо объяснить подробнее. Когда в файле листа мы будем указывать стиль ячейки, мы будем ссылаться как раз на эту секцию. Каждый тег <xf />, представляющий собой один стиль, является собранием ссылок на предыдущие секции, то есть он сам по себе не содержит объявления шрифта, границ и заливки. Рассмотрим интересные атрибуты ближе:
— numFmtId — указание формата текста в ячейке (дата, валюта, число, текст, …). Полный перечень этих типов есть здесь
— fontId, fillId, borderId — ссылка на шрифт/заливку/границы (см. секцию 1, 2 и 3 соответственно). Нумерация начинается с 0.
— applyFont, applyFill, applyBorder — указание на то, что при оформлении этой ячейки вообще используется кастомный шрифт/заливка/границы. По умолчанию 0, так что можно не указывать вообще, как видно на примере в элементе #0.
— applyAlignment — указание на то, что выравнивание текста в ячейке будет отличаться от стандартного. По умолчанию 0, но если указано «1», то в родительский тег <xf /> встраивается тег <alignment />, как видно на примере начиная с #1.
В теге alignment могут быть атрибуты:
-
horizontal — выравнивание текста в горизонтальной плоскости. Может иметь значения: left – по левому краю, center – по центру, right – по правому краю, justify – по ширине, fill — заполнение, distributed – распределенное
-
vertical — выравнивание текста по вертикали. Значения: top – по верхнему краю, center – по центру, bottom – по нижнему краю, justify – по высоте, distributed – распределенное
-
textRotation — угол поворота текста. Если установить 255 — то текст будет вертикальный.
-
wrapText=»1″ — перенос текста
Разбор xl/workbook.xml
Из статьи от @Lachrimae:
Основное его назначение — манифест, то есть перечень листов, из которых наша книга Excel, собственно, и состоит.
Выглядит этот перечень, к примеру, так:
<sheets>
<sheet name="Лист1" sheetId="1" r:id="rId1"/>
<sheet name="Лист2" sheetId="2" r:id="rId2"/>
<sheet name="Лист3" sheetId="3" r:id="rId3"/>
<sheet name="Лист4" sheetId="4" r:id="rId4"/>
</sheets>
Это значит, что в книге 4 листа, и их имена указаны в атрибутах name. Каждому тегу должен соответствовать файл в папке %file%/xl/worksheets. Excel сам знает, как должны называться эти файлы и при попытке их переименовать, сочтет всю книгу поврежденной.
Разбор [Content_Types].xml
Содержимое файла может быть следующим:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings" Extension="bin"/>
<Default ContentType="application/vnd.openxmlformats-package.relationships+xml" Extension="rels"/>
<Default ContentType="application/xml" Extension="xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" PartName="/xl/workbook.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" PartName="/xl/worksheets/sheet1.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.theme+xml" PartName="/xl/theme/theme1.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" PartName="/xl/styles.xml"/>
<Override ContentType="application/vnd.openxmlformats-package.core-properties+xml" PartName="/docProps/core.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" PartName="/docProps/app.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml" PartName="/xl/sharedStrings.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml" PartName="/xl/calcChain.xml"/>
</Types>
В этом файле прописываются определения типов всех файлов и их расположения.
Как видно, здесь записываются все файлы листов, стилей, строковых значений, формул и т.д.
Если в документе вы не используете, к примеру, формул, то строки 13 не будет записано.
Завершение
Я разобрал основные моменты содержания файла excel. Если вам будет интересно узнать про диаграммы и другие возможности excel — пишите в комментариях, я постараюсь сделать дополнение к этой статье из ваших просьб.
Каждому человеку свойственно ошибаться. Если я чего-любо не раскрыл или раскрыл не полностью, либо с ошибками — поправьте меня.
Если вам также будет интересно — напишу статью, как манипулировать с файлами excel посредством PHP/Java/Ruby.
Спасибо за внимание и уделенное время этой статье.
ЛЕКЦИЯ 1.
НАЗНАЧЕНИЕ
И ВОЗМОЖНОСТИ MICROSOFT OFFICE EXCEL. ИНТЕРФЕЙС ПРОГРАММЫ. ЗАПОЛНЕНИЕ И РЕДАКТИРОВАНИЕ ЯЧЕЙКИ.
ФОРМАТИРОВАНИЕ ДАННЫХ. ТИПЫ ДАННЫХ (ТЕКСТ, ЧИСЛО, ФОРМУЛА).
Электронные
таблицы или табличные процессоры предназначаются для решения задач, данные,
которых могут быть представлены в виде таблиц.
Без
электронных таблиц не обходятся бухгалтеры и кладовщики, участники бирж,
руководители брокерских контор, банков, финансовые менеджеры. Их помощью
пользуются не только в финансовой и учетной деятельности, но и в научной для
выполнения математических расчетов. Электронные таблицы предназначены для
обработки численных данных, автоматизации рутинных процессов пересчета
производных величин в зависимости от изменения исходных данных.
Однако
современные электронные таблицы не просто инструмент для калькуляции.
·Во-первых:
электронные таблицы позволяют проводить численные эксперименты с
математическими моделями (научные исследования.)
·Во-вторых:
электронные таблицы можно использовать как базу данных (операции сортировки,
выборки).
·В-третьих:
электронные таблицы удобный инструмент для изготовления форматированных
документов с графической информацией (портрет, видеоклип, цветная диаграмма).
·В-четвертых:
электронные таблицы позволяют создавать сложные и красиво оформленные
документы, например рекламу с прайс-листами, каталоги, графики работ,
расписание и т.д.
Электронные
таблицы — это специальная модель структурирования, представления
и обработки произвольной информации тесно связанной с текстовыми документами и
с базами данных.
Одно
из самых популярных средств управления электронными таблицами — программа Microsoft Excel.
Интерфейс
программы
Окно
Excel содержит все стандартные элементы приложений Windows. Это заголовок,
горизонтального меню, панели инструментов, полосы прокрутки, строки состояния.
Структура
окна Excel
Внешний вид окна
программы Excel отличается от окна Excel. Главное отличие
заключается в том, что Excel имеет «ленточный» интерфейс, в котором все
команды программы размещены на ленте, разбитой на вкладки, а те в свою очередь,
на группы, включающие отдельные команды.
В общем случае
окно программы Excel состоит из следующих элементов (рис. 1):
— строки
заголовка;
— ленты с
вкладками команд;
— панелей инструментов
во вкладках команд;
— кнопок
управления окном;
— кнопки “Office”;
— строки
формул;
— рабочего
листа;
— кнопок
переключения режимов просмотра;
— панели Быстрого
доступа;
— ярлыков
листов;
— строки
состояния.
Рисунок 1 – Окно
программы Excel
Специфичные
элементы окна:
1. Строка
формул (для ввода, редактирования данных). В левой ее части находится список
именованных ячеек, заголовок этого списка называется полем имени. В этом поле
высчитывается адрес (или имя) выделенной ячейки таблицы. Правее поля имени
находится 3 кнопки управления процессом ввода (видны во время ввода) .
2. Заголовок
столбца с обозначениями A,B,C,D,….
3. Заголовок
строки с номерами 1,2,3,4,….
4. Строка
с ярлычками листов позволяет переходить от одного рабочего листа к другому в
пределах рабочей книги.
5. Строка
состояния.
Структура
документа Excel.
Объектом
обработки MS Excel является документ: файл с расширением .xls (.xlsx),
называемый рабочей книгой, которое состоит из 1-го или нескольких рабочих
листов.
Листы одной
книги обычно связаны между собой тематически. В каждом файле могут размещаться
до 255 электронных таблиц (рабочий лист).
Столбцы по
умолчанию обозначают латинскими буквами A,B,C,D. Если букв не хватает
используются 2-х буквенные обозначения AA,BB,CC и т.д. Максимальное число
столбцов в таблице — 256.
Строки
нумеруются целыми числами. Максимальное число строк в таблице — 65536.
Основной
структурный элемент электронной таблицы — ячейка, расположенная на пересечении
столбца и строки, обозначается по номеру столбца и строки (без пробела).
Например:
A1,BB,CZ3 и т.д. Одна из ячеек на рабочем листе всегда является текущей.
Текущая ячейка обведена широкой рамкой и ее номер и содержимое приведены в
строке формул.
Содержимое
ячеек (типы данных)
Текст —
представляет собой строку, произвольной длины. Ячейка, содержащая текстовые
данные, не может использоваться в вычислениях. Если Excel не может
интерпретировать данные в ячейке как число или формулу программа считает, что
это текстовые данные. Для ввода числа в формате текста (случае
ввода телефонных кодов) следует ввести перед числом символ апострофа, ‘01481.
данные теперь рассматриваются Excel как текст.
Арифметические операции работать не будут. Число будет либо проигнорировано,
или появится сообщение об ошибке
Числовые
данные — отдельное число. Это последовательность цифр со
знаком или без, дробная часть отделяется «,».Как числа рассматривают
данные определяющие дату или денежные суммы 257; -145,2; 15$. Элементы
даты можно отделять друг от друга символом (/) или (—), либо
использовать текст, например 10 окт 03. Excel распознает
множество форматов даты. Элементы времени можно отделять символом двоеточие,
например 10:43:45.
Формулы.
Ячейка с формулой служит для проведения вычислений над ячейками с числами
(вычисляемая ячейка). Формула начинается со знака «=» (например =
A2*B2+C3)
Формула
может содержать:
— знаки
операций: +, -, *, /, ^,
— константы
— ссылки
на ячейки и интервалы (A1:E10)
— имена
интервалов
— встроенные
функции (SQRT, SIN,SUM).
Ввод и
редактирование данных
Данные можно
вводить непосредственно в ячейку или в строку формул. Для ввода данных (текст,
даты, числа, формулы и т. д.) с использованием клавиатуры следует выделить
ячейку, ввести данные с клавиатуры непосредственно в ячейку или в строку формул
и подтвердить ввод.
Подтвердить ввод
можно одним из трех способов:
·
нажать
клавишу клавиатуры <Enter> или <Tab>;
·
нажать
кнопку Ввод (зеленая галочка) в строке формул;
·
выделить
любую другую ячейку на листе (нельзя использовать при вводе формул).
Неправильно
введенный символ можно удалить. Для удаления символа, находящегося слева от
текстового курсора, надо нажать клавишу клавиатуры <Back Space>.
При вводе данных
переводить текстовый курсор в ячейке клавишами клавиатуры нельзя. Это можно
сделать только с использованием мыши. Необходимо навести указатель мыши и один
раз щелкнуть левой кнопкой мыши.
По умолчанию все
данные ячейки вводятся одной строкой. Для перехода к новой строке (новому
абзацу) в ячейке необходимо нажать клавишу клавиатуры <Enter> при
нажатой клавише <Alt> (рис.2).
Рисунок 2 – Ввод
данных в ячейку в две строки
Для отказа от
ввода данных в ячейку следует нажать клавишу клавиатуры <Esc> или
кнопку Отмена (красный крестик) в строке формул.
Одни и те же
данные можно ввести одновременно в несколько ячеек одного листа. Для этого
следует выделить ячейки (не обязательно смежные), в которые необходимо ввести
данные, ввести данные и нажать клавиши клавиатуры <Ctrl> +
<Enter> или, при нажатой клавише клавиатуры <Ctrl>,
щелкнуть по кнопке Ввод в строке формул (см. рис. 1).
Одни и те же
данные можно ввести одновременно в одноименные ячейки различных листов. Для
этого следует выделить ярлыки листов, в которые необходимо ввести данные,
ввести данные и подтвердить ввод.
Чтобы заполнить
активную ячейку содержимым ячейки, расположенной выше (заполнить вниз), можно
нажать комбинацию клавиш клавиатуры <Ctrl> + <В>. Чтобы
заполнить активную ячейку содержимым ячейки, расположенной слева (заполнить
вправо), можно нажать комбинацию клавиш клавиатуры <Ctrl> + <К>.
Microsoft Excel
обычно распознает вводимые в ячейку данные (текст, числа, даты, время) и
автоматически устанавливает соответствующий формат данных.
Ввод
текста
При вводе текста
нельзя расставлять переносы в словах с использованием клавиши дефис ( – ). Это
может затруднить последующую работу с данными (сортировки, выборки и т. п.).
Переносы в словах в документах Excel вообще недопустимы.
Если весь текст
ячейки не помещается по ширине столбца, а ячейки справа не содержат данных, то
текст отображается на листе на соседних ячейках справа (ячейка А1 на
рис. 3). Если же ячейки справа содержат какие-либо данные, то весь текст на
листе не отображается (ячейка А2 на рис. 3). При этом текст в строке
формул отображается полностью.
Рисунок 3 –
Отображение текста в ячейках
Ввод
чисел
При первоначальном
вводе (до изменения ширины столбцов) числа в ячейке может отобразиться число из
11 цифр. При этом ширина столбца может автоматически увеличиться (ячейка В2
на рис. 4). При вводе большего числа происходит автоматическое форматирование
ячейки, и число будет отображено в экспоненциальном формате (ячейка В3
на рис.4)
Если же ширина
столбца была уменьшена и число не может быть отображено в ячейке, то вместо
числа в ячейке отображаются символы # (ячейка В4 на рис.4). При
этом число можно увидеть в строке формул или в виде всплывающей подсказки при
наведении указателя мыши на такую ячейку. В ячейке число может быть отображено
при увеличении ширины столбца или при уменьшении размера шрифта.
Рисунок 4 –
Отображение чисел в ячейке
При вводе с
клавиатуры десятичные дроби от целой части числа отделяют запятой.
Для удобства
представления больших чисел группы разрядов при вводе можно отделять пробелами.
Например, число 12345678 можно ввести как 12 456 789. В строке формул при этом
число будет отображаться без пробелов между разрядами (рис. 5).
Рисунок 5 – Ввод чисел
с разделителем разрядов
Группы разрядов
числа (за исключением первой группы) должны обязательно включать три знака. В
противном случае данные в ячейке не будут восприниматься как число. Формат с
разделителем разрядов запоминается в ячейке. После очистки содержимого ячейки и
ввода новой числовой информации (включая даты и время) к ней автоматически
будет применяться установленный числовой формат. Для возможности ввода другой
числовой информации необходимо очистить формат ячейки, для этого можно выполнить
команду на ленте вкладка
Главная группа
редактирование щёлкнуть по пиктограмме выбрать очистить
форматы).
В большинстве
случаев следует вводить числа без указания размерности. В противном случае
такая информация не воспринимается как число.
Исключение
составляет обозначение рубля (следует вводить число, а затем букву р
с точкой), а также процентов (следует вводить число, а затем символ процента %)
(рис. 6).
Рисунок 6 – Ввод
чисел с обозначением рубля и процентов
Обозначение рубля
и процентов запоминается в ячейке. После очистки содержимого ячейки и ввода
другого числа, к нему автоматически будет применяться установленное
обозначение.
Ввод дат и
времени
Microsoft Excel
воспринимает даты, начиная с 1 января 1900 года. Даты до 1 января 1900 года
воспринимаются как текст. Наибольшая возможная дата — 31 декабря 9999 года.
Произвольную дату
следует вводить в таком порядке: число месяца, месяц, год. В качестве
разделителей можно использовать точку (.), дефис (-), дробь (/). При этом все
данные вводятся в числовом виде. Точка после года не ставится. Например, для
ввода даты 12 августа 1918 года с клавиатуры в ячейку следует ввести:
12.8.1918 или
12-8-1918 или
12/8/1918
Независимо от
способа ввода и последующего форматирования дата в строке формул всегда
отображается в полном формате: ДД.ММ.ГГГГ.
Время следует
вводить в таком порядке: час, минуты, секунды. Впрочем, секунды вводить не
обязательно. В качестве разделителей следует использовать двоеточие (:). Точка
после секунд (минут) не ставится. Например, для ввода времени 14 часов 12 минут
00 секунд в ячейку достаточно ввести: 14:12.
Для отображения
времени суток в 12-часовом формате следует ввести букву a или p (обязательно в
английской раскладке клавиатуры), отделенную пробелом от значения времени,
например 9:00 p. После ввода время будет отображено с обозначением РМ (рис. 7).
Рисунок 7 –
Отображение времени при вводе
Ячейка может
содержать одновременно дату и время. Для этого необходимо ввести дату, ввести
пробел, а затем ввести время. Можно вводить и в обратной последовательности:
сначала время, а потом дату, но пробел должен быть обязательно.
Формат даты
(времени) запоминается в ячейке. После очистки содержимого ячейки и ввода
другой числовой информации, она автоматически будет приобретать вид даты
(времени). Для возможности ввода другой числовой информации необходимо очистить
формат ячейки.
Редактирование
данных: двойной щелчок на ячейке или щелчок в панели формул. По окончании
ввода программа Excel автоматически выравнивает текстовые данные по левому
краю, числовые по правому. В ячейке с формулой выводятся результаты вычислений.
Форматирование
данных. Если пользователя не устраивают соглашения о вводе, можно принудительно
установить новые правила. Выбрать нужный формат
(числовой, денежный и т.д.) можно следующим образом:
1. Выбрать
нужный формат можно на Ленте вкладка
Главная группа
Число
(рис. .
Рисунок 8 – Первый
способ открыть Формат ячеек
При этом откроется окно Формат ячеек рис.9.
Рисунок 9 – Окно Формат
ячеек
2. Выбрать
нужный формат можно на Ленте вкладка
Главная группа
Ячейки
(рис. 10).
Рисунок 10 – Второй
способ открыть Формат ячеек
3. Выбрать
нужный формат можно выделив ячейку Вызвать
контекстное меню щелкнув правой кнопкой мыши (рис. 11).
Рисунок 11 – Третий
способ открыть Формат ячеек
Недавно мне понадобилось встроить в CRM возможность создания отчетов в Excel посредством PHP, но готовые решения были сильно громоздкими. Поэтому я решил написать собственную библиотеку для работы с Excel файлами через PHP. Но информации о внутренности Excel было очень мало и мне пришлось собирать ее по крупинкам, иногда методами тыка, проб и ошибок разбирал работу некоторых элементов.
На написание данной статьи меня натолкнули уже существующие статьи от @Lachrimae.
Но дополнять ее в комментариях — очень громоздко и неудобно. Поэтому я решил поделиться всеми свои знаниями в новой статье, и если это поможет кому-то, то мои старания будут более, чем не напрасны.
Оглавление:
-
Структура файлов;
-
Разбор файла _rels/.rels;
-
Разбор docProps/app.xml;
-
Разбор docProps/core.xml;
-
Разбор xl/_rels/workbook.xml.rels;
-
Разбор xl/printerSettings/printerSettings1.bin;
-
Разбор xl/theme/theme1.xml;
-
Разбор xl/worksheets/_rels/sheet1.xml.rels;
-
Разбор xl/worksheets/sheet1.xml;
-
Разбор xl/caclChain.xml;
-
Разбор xl/sharedStrings.xml;
-
Разбор xl/styles.xml;
-
Разбор xl/workbook.xml;
-
Разбор [Content_Types].xml;
-
Завершение.
Структура файлов
Так как Excel — это архив файлов .xml, то мы можем его распаковать и увидеть следующее содержание:
Некоторые файлы могут отсутствовать, такие как: xl/worksheets/_rels/sheet.xml.rels, xl/calcChain.xml, xl/printerSettings/printerSettings1.bin и sharedString.xml
В папках xl/worksheets, xl/printerSettings и xl/worksheets/_rels могут быть по несколько файлов.
Давайте разберёмся, для чего все эти файлы, начнём по порядку:
_rels/.rels — описание связей файлов, касаемых самой работы Excel;
docProps/app.xml — описание и настройки приложения Excel;
docProps/core.xml — здесь записывается имя создателя файла, время создания и последнего редактирования файла;
xl/_rels/workbook.xml.rels — перечень и описание зависимостей файлов, используемых в книге;
xl/printerSettings/printerSettings1.bin — описание настроек для печати листа;
xl/theme/theme1.xml — описание стилей приложения’
xl/worksheets/_rels/sheet1.xml.rels — описание связей листа xl/worksheets/sheet1.xml с другими документами;
xl/worksheets/sheet1.xml — описание всего происходящего на листе, который находится на первой позиции в списке листов книги. Называние листа и название файла никак не связаны, файл всегда называется sheet1, sheet2 и т.д. На каждый лист приходится один такой файл;
xl/caclChain.xml — цепочка вычислений. Конструкция, указывающая порядок вычислений ячеек в книге в последний раз;
xl/sharedStrings.xml — перечень строковых значений, используемых во всей книге;
xl/styles.xml — описание стилей, используемых во всей книге;
xl/workbook.xml — описание настроек книги и перечень используемых листов;
[Content_Types].xml — описание всех файлов и их типов.
Разбор файла _rels/.rels
Если открыть файл — мы увидим следующее содержание:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
</Relationships>
В первой строке у нас объявляется тип документа — xml с его версией, кодировкой и автономности.
standalone (автономность) — Это объявление указывает, содержит ли внешнее подмножество DTD (Document Type Definition — определение типа документа) какие-либо объявления, которые могут повлиять на текущее содержимое документа.
Вторая строчка — открывающий тег для описания связей документов. Атрибут xmlns — означает, что используется пространство имен, от сюда и название самого атрибута — xml NameSpace.
Далее идут 3 строки связей с документами. У каждого есть атрибуты: Id — уникальное имя для связи, Type — ссылка на стандарт, описывающий нужный нам тип документа, Target — путь к исполняемому файлу.
Разбор docProps/app.xml
Содержимое данного файла примерно такая (не все элементы могут присутствовать и иметь тот же вид, что и у меня):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
<Application>Microsoft Excel</Application>
<DocSecurity>0</DocSecurity>
<ScaleCrop>false</ScaleCrop>
<HeadingPairs>
<vt:vector size="2" baseType="variant">
<vt:variant>
<vt:lpstr>Worksheets</vt:lpstr>
</vt:variant>
<vt:variant>
<vt:i4>1</vt:i4>
</vt:variant>
</vt:vector>
</HeadingPairs>
<TitlesOfParts>
<vt:vector size="1" baseType="lpstr">
<vt:lpstr>Лист 1</vt:lpstr>
</vt:vector>
</TitlesOfParts>
<Company></Company>
<LinksUpToDate>false</LinksUpToDate>
<SharedDoc>false</SharedDoc>
<HyperlinksChanged>false</HyperlinksChanged>
<AppVersion>14.0300</AppVersion>
</Properties>
Первая строка нам уже знакома.
Во второй строке открывающий тег properties и эта строка похожа на рассмотренную нами ранее.
Третья строка содержит название приложения. В данном случае — Microsoft Excel (что не удивительно). Данную строку лучше не изменять, ибо приложение упадет.
Следующая строка:
<DocSecurity>0</DocSecurity>
Означает безопасность документа и в зависимости от числа имеет следующий посыл:
0 — Документ не защищен
1 — Документ защищен паролем.
2 — Рекомендуется открывать документ только для чтения.
4 — Документ принудительно открыт только для чтения.
8 — Документ заблокирован для заметок.
Строка:
<ScaleCrop>false</ScaleCrop>
указывает режим отображения эскиза документа. Установите для этого элемента значение TRUE, чтобы включить масштабирование эскиза документа на экране. Установите для этого элемента значение FALSE, чтобы включить обрезку эскиза документа, чтобы отображались только те разделы, которые соответствуют отображаемому значению (из документации microsoft).
Далее открывается тег HeadeingPairs, внутри которого описаны группы частей документа и количество частей в каждой группе. Эти части являются не частями документа, а концептуальными представлениями разделов документа.
Внутри HeadingPairs мы имеем 1 векторный контент, в котором имеются 2 его части (подробнее о векторах и baseType можно почитать в документации microsoft).
Первая часть означает, что мы описываем листы в книге, а во второй части указываем количество этих листов.
Следующий тег — TitlesOfParts. Он описывает наименования частей документа. в данном случае — названия листов в книге. Здесь также указывается количество частей векторного контента.
В теге Company можно записать название компании.
Следующий элемент — LinksUpToDate — указывает, актуальны ли гиперссылки в документе. Установите для этого элемента значение TRUE, чтобы показать, что гиперссылки обновлены. Установите для этого элемента значение FALSE, чтобы указать, что гиперссылки устарели (из документации microsoft).
Элемент SharedDoc указывает, является ли этот документ в настоящее время общим для нескольких производителей. Если для этого элемента установлено значение TRUE, производителям следует проявлять осторожность при обновлении документа.
HyperlinksChanged указывает, что одна или несколько гиперссылок в этой части были обновлены исключительно в этой части производителем. Следующий производитель, который откроет этот документ, обновит отношения гиперссылок новыми гиперссылками, указанными в этой части.
Тег AppVersion указывает версию используемого приложения Excel при создании файла
Разбор docProps/core.xml
Содержимое файла примерно такова:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dc:creator>Виктор</dc:creator>
<dcterms:created xsi:type="dcterms:W3CDTF">2006-09-16T00:00:00Z</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2006-09-16T00:00:00Z</dcterms:modified>
</cp:coreProperties>
Первая строка нам уже знакома.
Во второй строке открывающий тег cp:coreProperties и эта строка похожа на рассмотренную нами ранее. Внутри него описываются свойства приложения:
dc:creator — Имя создателя документа;
dcterms:created — дата и время создания файла;
dcterms:modified — дата и время последнего изменения файла;
Разбор xl/_rels/workbook.xml.rels
Примерное содержимое файла:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>
<Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain" Target="calcChain.xml"/>
</Relationships>
Этот файл похож на раннее рассмотренный нами, только здесь уже описываются зависимости для файлов, которые используются непосредственно в книге.
Здесь записаны зависимости всех листов в книге, файла со строковыми значениями, цепочками вычислений и прочих файлов (мы разберем эти файлы дальше)
Разбор xl/printerSettings/printerSettings1.bin
Это файл, содержащий код в бинарном виде. Чтобы разобрать этот файл нужно описать много вещей про бинарники, а, чтобы научить писать правильно такой файл, потребуется много сил, времени и много текста. Да и в целом не вижу смысла вам работать с этим файлом. (честно говоря, я сам поверхностно знаком с этой темой).
Разбор xl/theme/theme1.xml
У меня не было надобностей разбирать этот файл, поэтому пока не буду описывать его работу. Но если кому-то понадобится (не знаю зачем) подробный разбор этого файла — я постараюсь сделать это.
Разбор xl/worksheets/_rels/sheet1.xml.rels
Содержимое этого файла может быть следующим:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings" Target="../printerSettings/printerSettings1.bin"/>
</Relationships>
Здесь описана одна зависимость с файлом xl/printerSettings/printerSettings1.bin — настройками для печати.
Разбор xl/worksheets/sheet1.xml
Начинается самое интересное и большое в этой статье.
Начинается такой файл с обычного объявления типа документа xml и некоторых настроек:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
<dimension ref="A1"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="J10" sqref="J10"/>
<pane ySplit="1" topLeftCell="A2" activePane="bottomRight" state="frozen"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
<cols>
<col min="1" max="1" width="12" customWidth="1"/>
<col min="3" max="5" width="14" customWidth="1"/>
<col min="6" max="7" width="31" customWidth="1"/>
</cols>
<sheetData/>
<mergeCells count="40">
<mergeCell ref="G15:I15"/>
<mergeCell ref="E3:F3"/>
<mergeCell ref="E4:F4"/>
</mergeCells>
<autoFilter ref="A1:N1"/>
<printOptions headings="1" gridLines="1"/>
<pageMargins left="0.7" right="0.7" top="0.7" bottom="0.7" header="0.3" footer="0.3"/>
<pageSetup paperSize="9" pageOrder="overThenDown" orientation="portrait" blackAndWhite="1" draft="1" cellComments="atEnd" errors="NA" r:id="rId1"/>
</worksheet>
Строка третья означает размер экспортируемого диапазона (с какой по какую ячейку находятся данные).
В теге sheetView — selection описывается выделенная клетка (или диапазон клеток).
Атрибут activeCell — активная ячейка, sqref — выделенная ячейка или диапазон ячеек.
такая строка может выглядеть и вот так:
<selection activeCellId="2" sqref="A1:B2 B2:C3 A1:C3"/>
Здесь уже вместо атрибута activeCell стоит activeCellId, потому что в атрибуте sqref мы видим несколько диапазонов. исходя из этого выясняем, что активный диапазон является A1:C3. на изображении ниже показано, как выглядит такой вариант выделения ячеек.
Про тег pane, sheetFormatPr и cols хорошо рассказано в статье от @Lachrimae:
Собственно, закрепление строки — тег <pane />. И вот какие здесь использованы атрибуты:
ySplit — показывает количество закрепленных строк. Для закрепления столбцов есть аналогичный атрибут xSplit;
topLeftCell — указание левой верхней ячейки, видимой по умолчанию НЕзакрепленной области;
activePane — указание местонахождения НЕзакрепленной области. В руководствах сказано, что этот атрибут регулирует, с какой стороны будет НЕзакрепленная область. Правда, попробовав разные значения, я почему-то получил одинаковый результат. Как вариант «by default» я для себя выбрал bottomRight;
state — указатель состояния закрепленной области. Для простого закрепления строки используется значение frozen
Тег <sheetFormatPr />. Пример:
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
Интересен нам здесь в основном атрибут defaultRowHeight, то есть высота столбца по умолчанию. Стандартный, привычный нам вариант — 15 у.е. Если назначить его, скажем, 30 у.е., то строки, для которых высота не указана отдельно, станут в 2 раза выше. Однако, для того чтоб применить значение, отличное от дефолтного, необходимо указать атрибут customHeight со значением «true». Выглядит это примерно так:
<sheetFormatPr defaultRowHeight="30" customHeight="true" x14ac:dyDescent="0.25"/>
Тег </cols>. Помогает установить ширину столбцов отличную от дефолтной. В заполненном виде выглядит примерно так:
Вложенные теги </col> обозначают не каждый один столбец, как могло показаться, а группу столбцов, идущих подряд и имеющих единую ширину.
Атрибут min — первый столбец группы;
Атрибут max — последний столбец группы;
Атрибут width — ширина столбца из группы;
Атрибут customWidth — флаг применения кастомной ширины, без него ширина все равно будет дефолтной;
Тег sheetData — описание содержимого ячеек и их настроек.
здесь структура такова:
<sheetData>
<row r="1" spans="1:5" ht="18" customHeight="1" x14ac:dyDescent="0.25">
<c r="A1">
<v>1</v>
</c>
<c r="B1" t="s">
<v>0</v>
</c>
<c r="C1" t="s">
<v>1</v>
</c>
<c r="D1" t="s">
<v>2</v>
</c>
<c r="E1">
<v>1</v>
</c>
</row>
<row r="4" spans="1:5" x14ac:dyDescent="0.25">
<c r="A4" t="s">
<v>2</v>
</c>
<c r="B4">
<f>SUM(A1:E1)</f>
<v>2</v>
</c>
</row>
</sheetData>
В Excel это будет выглядеть вот так:
Давайте разбираться, что же все-таки в коде происходит.
Мы видим два тега row — это наши строки. У каждой есть атрибут r — это номер строки. Атрибут spans означает сколько столбцов задействовано, dyDescent — вертикальное расстояние в пикселях между ячейками. Атрибут ht устанавливает высоту всей строки в пунктах, а тег customHeight говорит, что мы используем нестандартную высоту строки.
В теге row есть теги c — это ячейки в строке. у каждого тега есть атрибут r — означающий позицию ячейки. Но атрибут t — присутствует не у всех, потому что запись t=»s» — означает, что у ячейки установлен тип строки, а у кого этого атрибута нет — тип устанавливается стандартный — числовой. Еще у тегов c может присутствовать атрибут s, в котором записывается номер применяемого к ячейке стиля из файла xl/styles.xml (мы доберемся до него позже).
Внутри тегов c есть теги v — это наши значения, записываемые в ячейки. Но не все так просто. Те значения, которые находятся в теге c без атрибута t — те значения записываются без изменений, т.е. записывается в ячейку само число из тега v, а вот те значения, которые находятся в теге c с атрибутом t — уже обрабатываются по-другому: в теге v записан порядковый номер строки в файле xl/sharedStrings.xml (мы доберемся до него позже). В ячейку уже записывается строка, которая имеет порядковый номер, записанный в теге v.
Но мы можем заметить, что одна ячейка имеет помимо тега v еще тег f. Это тег с формулой, в данном случае формула означает: сумма ячеек от A1 до E1. А в теге v записан уже посчитанный ответ. Делать это не обязательно, но если не записать — то при открытии документа excel предложит сохранить изменения, т.к. он сам автоматически посчитал и записал этот результат.
С тегом sheetData разобрались, идем дальше.
Про теги mergeCells и autoFilter снова обратимся к статье от @Lachrimae:
Тег <mergeCells />.
Как мы знаем, в Excel есть возможность объединения ячеек. Все объединенные ячейки на листе перечислены здесь. В заполненном виде тег выглядит примерно так:
<mergeCells count="40">
<mergeCell ref="G15:I15"/>
<mergeCell ref="E3:F3"/>
<mergeCell ref="E4:F4"/>
</mergeCells>
Как видно, одна объединенная ячейка обозначена одним тегом <mergeCell /> с единственным атрибутом ref, задающим диапазон объединения.
Тег <autoFilter />. Фильтры, которые так любят видеть в отчетах наши пользователи. В заполненном виде тег выглядит так:
<autoFilter ref="A1:N1"/>
Нетрудно понять, что атрибут ref задает зону, занимаемую активными ячейками фильтров.
Тег printOptions — параметры печати. Атрибут headings — означает, что будут печататься заголовки, а атрибут gridLines — что будут печататься линии сетки.
Тег pageMargins задает поля сверху, снизу, справа, слева, у заголовков и у подвала для печатаемой страницы.
Тег pageSetup предпочтительные настройки бумаги, опять же, для печати.
Атрибут paperSize — устанавливает размер бумаги.
Используемые значения:
Значение |
Описание |
---|---|
16 |
10 в. x 14 в. |
17 |
11 в. x 17 в. |
8 |
A3 (297 мм x 420 мм) |
9 |
A4 (210 мм x 297 мм) |
10 |
A4 Small (210 мм x 297 мм) |
11 |
A5 (148 мм x 210 мм) |
12 |
B4 (250 мм x 354 мм) |
13 |
A5 (148 мм x 210 мм) |
24 |
Лист размеров C |
25 |
Лист размеров D |
20 |
Конверт #10 (4-1/8 в. x 9-1/2 в.) |
21 |
Конверт #11 (4-1/2 в. x 10-3/8 in.) |
22 |
Конверт #12 (4-1/2 в. x 11 in.) |
23 |
Конверт #14 (5 в. x 11-1/2 в.) |
19 |
Конверт #9 (3-7/8 в. x 8-7/8 in.) |
33 |
Конверт B4 (250 мм x 353 мм) |
34 |
Конверт B5 (176 мм x 250 мм) |
35 |
Конверт B6 (176 мм x 125 мм) |
29 |
Конверт C3 (324 мм x 458 мм) |
30 |
Конверт C4 (229 мм x 324 мм) |
28 |
Конверт C5 (162 мм x 229 мм) |
31 |
Конверт C6 (114 мм x 162 мм) |
32 |
Конверт C65 (114 мм x 229 мм) |
27 |
DL конверта (110 мм x 220 мм) |
36 |
Конверт (110 мм x 230 мм) |
37 |
Envelope Monarch (3-7/8 in. x 7-1/2 in.) |
38 |
Конверт (3-5/8 в. x 6-1/2 in.) |
26 |
Лист размеров E |
7 |
Executive (7-1/2 в. x 10-1/2 in.) |
41 |
Немецкий юридический фанфолд (8-1/2 в. x 13 in.) |
40 |
Немецкий юридический фанфолд (8-1/2 в. x 13 in.) |
39 |
Стандартный фанфолд США (14-7/8 в. x 11 in.) |
14 |
Фолио (8-1/2 в. x 13 in.) |
4 |
Книга (17 в. x 11 in.) |
5 |
Юридический (8-1/2 в. x 14 in.) |
1 |
Письмо (8-1/2 в. x 11 in.) |
2 |
Letter Small (8-1/2 in. x 11 in.) |
18 |
Примечание (8-1/2 в. x 11 in.) |
15 |
Quarto (215 мм x 275 мм) |
6 |
Заявление (5-1/2 в. x 8-1/2 in.) |
3 |
Таблоид (11 в. x 17 in.) |
256 |
Пользовательский |
Атрибут pageOrder — направление печати. Если значение «overThenDown» — то будет печататься слева направо, потом нижняя часть снова слева направо и т.д. Если такого атрибута нет — то печататься будет сначала вся левая сторона сверху-вниз, потом та часть, что справа и т.д.
Атрибут orientation — задает ориентацию листов. «portrait» — портретная (вертикальная) ориентация, «landscape» — альбомная (горизонтальная) ориентация.
Атрибут blackAndWhite — если установлена 1 ил true — лист будет напечатан в черно-белом варианте.
Атрибут draft — если установлена 1 ил true — лист будет напечатан без графики.
Атрибут cellComments — печать комментариев к ячейкам. Используемые значения:
-
AsDisplayed — Распечатать Комментарии Как отображается;
-
AtEnd — Печать в конце;
-
None — Не печатать.
Атрибут errors — Печать обработки ошибок.
-
Blank — Показать ошибки ячейки как пустые;
-
Dash — Ошибки ячейки Dash;
-
Displayed — Отображение ошибок ячейки;
-
NA — Отображает «NA».
Атрибут r:id — идентификатор настроек.
Разбор xl/caclChain.xml
По традиции, начнем с содержимого файла:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<calcChain xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<c r="B4" i="1"/>
</calcChain>
Здесь нам важна строка 3. видим тег c — наша ячейка, у нее есть атрибут r — адрес ячейки. Индексный атрибут i указывает индекс листа, с которым связана ячейка.
Разбор xl/sharedStrings.xml
Обратимся к статье от @Lachrimae:
Представим, что у нас есть таблица, заполненная строковыми данными, и что она большая. При этом крайне маловероятно, что все значения в ней будут уникальны. Некоторые из них нет-нет, да повторятся где-нибудь в разных частях таблицы. Хранить такой массив «как есть» внутри XML-разметки листа нерационально с точки зрения ресурсов ПК. Поэтому все строковые значения вынесены в отдельный файл, /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 просто сделает вид, что его нет.
Добавлю: каждый тег si имеет порядковый номер, начиная с 0. Он нигде не записывается. Этот номер и записывается в файле xl/worksheets/sheet1.xml в теге sheetData, который мы рассматривали ранее.
Разбор xl/styles.xml
Снова обратимся к статье от @Lachrimae. Буду добавлять от себя дополнительную информацию.
Как нетрудно догадаться, здесь хранится информация об оформлении ячеек. Причем в угоду оптимизации, хранится она в достаточно интересном виде. Файл состоит из следующих секций:
1. Шрифты:
<fonts count="2" x14ac:knownFonts="1">
<font>
<sz val="11"/>
<color theme="1"/>
<name val="Calibri"/>
<family val="2"/>
<scheme val="minor"/>
</font>
<font>
<b/>
<sz val="11"/>
<color theme="1"/>
<name val="Calibri"/>
<family val="2"/>
<charset val="204"/>
<scheme val="minor"/>
</font>
</fonts>
Как можно понять, здесь перечислены только уникальные стили оформления текста, использованные в книге. Каждый тег — один стиль. Вложенные теги — особенности стиля, такие как полужирное написание (тег <b/>), кегль (<sz/>) и другие.
На месте тега <b/> можно написать:
-
<i/> — курсив;
-
<u/> — подчеркнутый,
либо <u val=»double»/> — двойное подчеркивание; -
<strike/> — зачеркнутый;
-
<vertAlign val=»superscript»/> — надстрочный текст,
либо <vertAlign val=»subscript»/> — подстрочный текст;
либо сочетание нескольких тегов.
Если хотите установить цвет шрифта какой-нибудь свой (возьмем #123456), то в теге color вместо атрибута theme пишем rgb и вставляем hex-код цвета, должно получиться вот так:
<color rgb="123456"/>
2. Заливка ячеек:
<fills count="2">
<fill>
<patternFill patternType="none"/>
</fill>
<fill>
<patternFill patternType="gray125"/>
</fill>
</fills>
Как видно, первый вариант — без заливки вообще, а второй — сплошная заливка библиотечного цвета «gray125».
Здесь тот же принцип с установкой своего цвета, только немного по-другому записывается:
<fill>
<patternFill patternType="solid">
<fgColor rgb="123456"/>
<bgColor indexed="64"/>
</patternFill>
</fill>
Тег fgcolor — отвечает за цвет переднего плана, а bgcolor — за цвет заднего плана (indexed=»64″ — черный цвет).
У тега patternFill атрибут patternType может иметь следующие значения:
-
none — Нет заливки;
-
solid — Сплошная заливка; (пример выше)
-
darkGray — Серый 75%;
Пример
<fill> <patternFill patternType="darkGray"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки Здесь мы можем наблюдать, что цвета расположены в сетку
-
mediumGray — Серый 50%;
Пример
<fill> <patternFill patternType="mediumGray"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки Здесь сетка уже поменьше и цвет из тега fgcolor уже меньше прорисовывается.
-
lightGray — Серый 25%;
Пример
<fill> <patternFill patternType="lightGray"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки Здесь сетка еще меньше и цвет из тега fgcolor еще меньше прорисовывается.
-
gray125 — Серый 12.5%;
Пример
<fill> <patternFill patternType="gray125"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки Посыл, думаю, понятен
-
gray0625 — Серый 0.025%
Пример
<fill> <patternFill patternType="gray0625"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkHorizontal — Полосатый цвет с горизонтальными линиями;
Пример
<fill> <patternFill patternType="darkHorizontal"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkVertical — Полосатый цвет с вертикальными линиями;
Пример
<fill> <patternFill patternType="darkVertical"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkDown — Полосатый цвет с диагональными линиями сверху-вниз;
Пример
<fill> <patternFill patternType="darkDown"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkUp — Полосатый цвет с диагональными линиями снизу-вверх;
Пример
<fill> <patternFill patternType="darkUp"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
darkGrid — Диагональный клетчатый;
Пример
<fill> <patternFill patternType="darkGrid"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки В этом варианте сетки четко видно, клетки цветов одинаковые и их поровну. Как шахматная доска
-
darkTrellis — Толстый диагональный клетчатый;
Пример
<fill> <patternFill patternType="darkTrellis"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightHorizontal — Полосатый цвет с горизонтальными тонкими линиями;
Пример
<fill> <patternFill patternType="lightHorizontal"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightVertical — Полосатый цвет с вертикальными тонкими линиями;
Пример
<fill> <patternFill patternType="lightVertical"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightDown — Полосатый цвет с диагональными тонкими линиями сверху-вниз;
Пример
<fill> <patternFill patternType="lightDown"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightUp — Полосатый цвет с диагональными тонкими линиями снизу-вверх;
Пример
<fill> <patternFill patternType="lightUp"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightGrid — Тонкий горизонтальный клетчатый;
Пример
<fill> <patternFill patternType="lightGrid"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки -
lightTrellis — Тонкий диагональный клетчатый;
Пример
<fill> <patternFill patternType="lightTrellis"> <fgColor rgb="FF0000"/> <bgColor rgb="00FF00"/> </patternFill> </fill>
Цвет выглядит вот так:
Цвет ячейки
Можно еще заливку сделать градиентом:
-
Горизонтальный, вертикальный, диагональный:
Примеры
2 цвета:
<fill> <gradientFill degree="90"> <stop position="0"> <color rgb="0000FF"/> </stop> <stop position="1"> <color rgb="FFFFFF"/> </stop> </gradientFill> </fill>
градиент 2 цвета Атрибут degree — угол поворота, изменяя который можно менять направление градиента.
3 цвета:
<fill> <gradientFill degree="90"> <stop position="0"> <color rgb="0000FF"/> </stop> <stop position="0.5"> <color rgb="FFFFFF"/> </stop> <stop position="1"> <color rgb="FF0000"/> </stop> </gradientFill> </fill>
Градиент 3 цвета
-
От угла:
Примеры
От левого верхнего угла
<fill> <gradientFill type="path"> <stop position="0"> <color rgb="0000FF"/> </stop> <stop position="1"> <color rgb="FFFFFF"/> </stop> </gradientFill> </fill>
Градиент от угла От правого верхнего угла — в тег gradientFill добавить атрибуты left=»1″ right=»1″, чтобы получилось:
<gradientFill left="1" right="1" type="path">
От левого нижнего угла — в тег gradientFill добавить атрибуты bottom=»1″ top=»1″;
От правого нижнего угла — в тег gradientFill добавить атрибуты bottom=»1″ top=»1″ left=»1″ right=»1″;
-
От центра:
<fill> <gradientFill bottom="0.5" top="0.5" right="0.5" left="0.5" type="path"> <stop position="0"> <color rgb="0000FF"/> </stop> <stop position="1"> <color rgb="FFFFFF"/> </stop> </gradientFill> </fill>
Градиент от центра
3. Границы:
<borders count="2">
<border>
<left/>
<right/>
<top/>
<bottom/>
<diagonal/>
</border>
<border>
<left style="thin">
<color indexed="64"/>
</left>
<right style="thin">
<color indexed="64"/>
</right>
<top style="thin">
<color indexed="64"/>
</top>
<bottom style="thin">
<color indexed="64"/>
</bottom>
<diagonal/>
</border>
</borders>
Как видно, одно наименование здесь состоит из пяти элементов, 4 основных границы и диагональная, то есть все то, что можно настроить через GUI самого Excel.
Атрибут style означает стиль границы и может иметь следующие значения:
-
thin – тонка сплошная;
-
hair – мелкая пунктирная;
-
dotted – точечная пунктирная;
-
dashed – пунктирная линия;
-
dashDot – пунктир линия точка;
-
dashDotDot – пунктир линия точка точка;
-
double – двойная сплошная;
-
medium – сплошная средней толщины;
-
mediumDashed – пунктирная линия средней толщины;
-
mediumDashDot – пунктир линия точка средней толщины;
-
mediumDashDotDot – пунктир линия точка точка средней толщины;
-
slantDashDot – косая пунктир линия точка средней толщины;
-
thick – сплошная большой толщины.
Для установки цвета границы используйте уже известную нам запись:
<color rgb="123FFF"/>
Чтобы установить диагональную границу, нужно в тег diagonal записать атрибуты:
-
diagonalDown=»1″ — для границы сверху-вниз;
-
diagonalUp=»1″ — для границы снизу вверх.
Должно получиться:
<diagonal diagonalDown="1"/>
<diagonal diagonalUp="1"/>
<diagonal diagonalDown="1" diagonalUp="1"/>
Ну и не забудьте внутри тега diagonal записать цвет для границы — тег color.
4. Стили ячеек:
<cellXfs count="4">
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
<xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1" applyAlignment="1">
<alignment wrapText="1"/>
</xf>
<xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyBorder="1" applyAlignment="1">
<alignment horizontal="center" vertical="center"/>
</xf>
<xf numFmtId="0" fontId="1" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
<alignment horizontal="center" vertical="center"/>
</xf>
</cellXfs>
А вот здесь надо объяснить подробнее. Когда в файле листа мы будем указывать стиль ячейки, мы будем ссылаться как раз на эту секцию. Каждый тег <xf />, представляющий собой один стиль, является собранием ссылок на предыдущие секции, то есть он сам по себе не содержит объявления шрифта, границ и заливки. Рассмотрим интересные атрибуты ближе:
— numFmtId — указание формата текста в ячейке (дата, валюта, число, текст, …). Полный перечень этих типов есть здесь
— fontId, fillId, borderId — ссылка на шрифт/заливку/границы (см. секцию 1, 2 и 3 соответственно). Нумерация начинается с 0.
— applyFont, applyFill, applyBorder — указание на то, что при оформлении этой ячейки вообще используется кастомный шрифт/заливка/границы. По умолчанию 0, так что можно не указывать вообще, как видно на примере в элементе #0.
— applyAlignment — указание на то, что выравнивание текста в ячейке будет отличаться от стандартного. По умолчанию 0, но если указано «1», то в родительский тег <xf /> встраивается тег <alignment />, как видно на примере начиная с #1.
В теге alignment могут быть атрибуты:
-
horizontal — выравнивание текста в горизонтальной плоскости. Может иметь значения: left – по левому краю, center – по центру, right – по правому краю, justify – по ширине, fill — заполнение, distributed – распределенное
-
vertical — выравнивание текста по вертикали. Значения: top – по верхнему краю, center – по центру, bottom – по нижнему краю, justify – по высоте, distributed – распределенное
-
textRotation — угол поворота текста. Если установить 255 — то текст будет вертикальный.
-
wrapText=»1″ — перенос текста
Разбор xl/workbook.xml
Из статьи от @Lachrimae:
Основное его назначение — манифест, то есть перечень листов, из которых наша книга Excel, собственно, и состоит.
Выглядит этот перечень, к примеру, так:
<sheets>
<sheet name="Лист1" sheetId="1" r:id="rId1"/>
<sheet name="Лист2" sheetId="2" r:id="rId2"/>
<sheet name="Лист3" sheetId="3" r:id="rId3"/>
<sheet name="Лист4" sheetId="4" r:id="rId4"/>
</sheets>
Это значит, что в книге 4 листа, и их имена указаны в атрибутах name. Каждому тегу должен соответствовать файл в папке %file%/xl/worksheets. Excel сам знает, как должны называться эти файлы и при попытке их переименовать, сочтет всю книгу поврежденной.
Разбор [Content_Types].xml
Содержимое файла может быть следующим:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings" Extension="bin"/>
<Default ContentType="application/vnd.openxmlformats-package.relationships+xml" Extension="rels"/>
<Default ContentType="application/xml" Extension="xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" PartName="/xl/workbook.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" PartName="/xl/worksheets/sheet1.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.theme+xml" PartName="/xl/theme/theme1.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" PartName="/xl/styles.xml"/>
<Override ContentType="application/vnd.openxmlformats-package.core-properties+xml" PartName="/docProps/core.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" PartName="/docProps/app.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml" PartName="/xl/sharedStrings.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml" PartName="/xl/calcChain.xml"/>
</Types>
В этом файле прописываются определения типов всех файлов и их расположения.
Как видно, здесь записываются все файлы листов, стилей, строковых значений, формул и т.д.
Если в документе вы не используете, к примеру, формул, то строки 13 не будет записано.
Завершение
Я разобрал основные моменты содержания файла excel. Если вам будет интересно узнать про диаграммы и другие возможности excel — пишите в комментариях, я постараюсь сделать дополнение к этой статье из ваших просьб.
Каждому человеку свойственно ошибаться. Если я чего-любо не раскрыл или раскрыл не полностью, либо с ошибками — поправьте меня.
Если вам также будет интересно — напишу статью, как манипулировать с файлами excel посредством PHP/Java/Ruby.
Спасибо за внимание и уделенное время этой статье.