# informat.excel excel文件相关

## 模版表达式

```text
 1、 空格分割
 2、 三目运算 {{test ? obj:obj2}}
 3、 n: 表示 这个cell是数值类型 {{n:}}
 4、 le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
 5、 fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
 6、 fn: 格式化数字 {{fn:(obj;###.00)}}
 7、 fe: 遍历数据,创建row
 8、 !fe: 遍历数据不创建row
 9、 $fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
10、 !if: 删除当前列 {{!if:(test)}}
11、 `''`(单引号)表示常量值，例如`{{ '1' }}`，输出的是1
12、 &NULL& 表示空格
13、 ]] 换行符
```


### 数值类型
默认情况下单元格格式都是字符串类型，如果需要将单元格显示为数字，则需要是用n:指令
```
 {{n: }}
```

**示例**
:::: tabs
::: tab "模版数据"
```json
{
  "str": "123",
  "num": 1
}
```
:::
::: tab "表达式"
```
{{n:str}} 
{{n:num}}
```
:::
::::


### 长度
返回列表的长度
```
{{ le: (array)}
```

**示例**

:::: tabs
::: tab "模版数据"
```json
{
    "users":[1,2,3,4]
}
```
:::
::: tab "表达式"
```
{{ le:(users) }}
```
:::
::::


### 格式化时间
返回格式化时间
```
{{fd:(obj;yyyy-MM-dd)}}
```
**示例**
:::: tabs
::: tab "模版数据"
```js
{
  date:new Date()
}
```
:::
::: tab "表达式"
```
{{ fd:(date;yyyy年MM月dd) }}
```
:::
::::


### 格式化数字
返回格式化数字
```
{{fn:(obj;###.00)}}
```

::: tip
- 占位符`0`
    - 比实际数字的位数多，不足的地方用0补上。
    - 比实际数字的位数少：整数部分不改动，小数部分，四舍五入
- 占位符`#`
    - 比实际数字的位数多，不变。
    - 比实际数字的位数少：整数部分不改动，小数部分，四舍五入
:::

**示例**

:::: tabs
::: tab "模版数据"
```json
{
  "number":123.456
}
```
:::
::: tab "表达式"
```
{{fn:(number;###.0)}} // 123.5
{{fn:(number;###.0000)}} // 123.4560
```
:::
::::





### 遍历数据

```
{{ fe:array }}
```

**示例**
:::: tabs
::: tab "模版数据"
```json
{
    "users":[
        {"id":1, "name":"张三"},
        {"id":2, "name":"李四"},
        {"id":3, "name":"王五"}
    ]
}
```
:::

::: tab "表达式"
```
{{fe:users t.id t.name }}
```
:::
::::

::: tip 其它循环
- `$fe:`会将模板中当前行下面的行下移
- `!fe:`并不会将模板中当前行下面的行下移，循环插入的数据会覆盖掉当前行下面的行。
- `#fe:`的语法和 fe:的语法类似，不同之处是#fe的循环方向是横向。需要注意的是表达式必须在同一行中
:::

### 图片

```
 {{ img }}
```
**示例**
:::: tabs
::: tab "模版数据"
```js
let img = informat.excel.createTemplatePicture({
  type:'file', // 本地存储
  content:'path/img.jpg', //本地存储中的文件路径
  width:100, //宽度
  height:100, //高度
});
```
:::

::: tab "表达式"
```
{{ img }}
```
:::
::::
