  A spreadsheet usually starts as a simple and single-user software artifact,
but, as frequent as in other software systems, quickly evolves into a complex
system developed by many actors. Often, different users work on different
aspects of the same spreadsheet: while a secretary may be only involved in
adding plain data to the spreadsheet, an accountant may define new business
rules, while an engineer may need to adapt the spreadsheet content so it can be
used by other software systems. Unfortunately, spreadsheet systems do not offer
modular mechanisms, and as a consequence, some of the previous tasks may be
defined by adding intrusive "code" to the spreadsheet.
  In this paper we go through the design and implementation of an
aspect-oriented language for spreadsheets so that users can work on different
aspects of a spreadsheet in a modular way. For example, aspects can be defined
in order to introduce new business rules to an existing spreadsheet, or to
manipulate the spreadsheet data to be ported to another system. Aspects are
defined as aspect-oriented program specifications that are dynamically woven
into the underlying spreadsheet by an aspect weaver. In this aspect-oriented
style of spreadsheet development, different users develop, or reuse, aspects
without adding intrusive code to the original spreadsheet. Such code is
added/executed by the spreadsheet weaving mechanism proposed in this paper.
