ExcelPatternTool: Excel表格-資料庫互導工具

2022-08-01 18:08:07

ExcelPatternTool

Excel表格-資料庫互導工具

介紹:

指定Pattern檔案-一個規則描述的json檔案,基於此規則實現Excel表格與資料庫之間的匯入匯出,校驗等功能。

特點:

  1. 小巧,輕量化的命令列工具
  2. 基於json檔案的設定
  3. 支援Excel97-2003(xls)與Excel2007及以上(xlsx)格式
  4. 資料庫支援SQL server、Sqlite、MySql
  5. 支援單元格註解,樣式,公式的匯出(匯出至Excel)
  6. 內建lambda表示式和正規表示式兩種校驗器

更新內容:

Date Version Content
V0.1.0 2022-7-29 初始版本

快速開始

編寫Pattern檔案

  1. 匯入規則編寫
  • 指定表格的工作表名稱SheetName或者工作表序號SheetNumber,二者選一設定即可,SheetName優先,SheetNumber從0開始
  • 指定開始行數SkipRow,這個是實際資料的開始行數,不包含表頭行。在Sample中,這個行數為3

Sample:

"ExcelImport": {			// excel匯入規則
    "SheetName": "",		// 工作表名稱
    "SheetNumber": 0,       // 工作表序號
    "SkipRow": 3           // 開始行數
  }
  1. 匯出規則編寫
  • 指定資料庫表的名稱,主鍵型別。資料庫型別將在Cli引數中指定

Sample:

"DbExport": {               // Db匯出規則
    "TableKeyType": "Guid", // 表主鍵型別 可選 "無","int","long","Guid",
    "TableName": "Employee" // 表名稱
  }
  1. Pattern設定

對列進行設定

  • 列指定列標題名稱,屬性名稱,型別和排序
  • 單元格型別為普通型別是"常規"時,直接輸出的為單元格值,"包含註解","包含樣式","包含公式","全包含"僅對匯出至Excel有效
  • Ignore 為True時將忽略這一列,等效於無此列的Pattern設定
  • 列序號為此列在Excel中的編號,從0開始,即A列對應0,B列對應1 ...
  • 列屬性型別PropType為bool時,可支援0,1,True,False

Sample:


"Patterns": [                       // Pattern設定
    {
      "PropName": "EmployeeName",   // 屬性名稱
      "HeaderName": "姓名",         // 列標題名稱
      "PropType": "string",         // 屬性型別,可選 "string", "DateTime","int","double","bool",
      "CellType": "常規",           // 單元格型別 可選 "常規","包含註解","包含樣式","包含公式","全包含"
      "Ignore": false,              // 是否忽略
      "Order": 0,                   // 列序號
      "Validation": {               // 校驗設定
       ...
      }
    },

設定校驗

  • 設定Target,可對單元格值或單元格公式進行校驗
  • 普通校驗器時,{value}預留位置代表當前單元格值或公式的內容
  • Sample1為普通校驗器,校驗單元格數值,Sample2為正則校驗器,校驗單元格公式

Sample1:

    
      "Validation": {
        "Target": "單元格數值",
        "Description": "整數值需要大於2",
        "Convention": "普通校驗器",
        "Expression": "{value}>=2"
      }
    

Sample2:

    
      "Validation": {
        "Target": "單元格公式",
        "Description": "需要滿足正規表示式",
        "Convention": "正規表示式校驗器",
        "Expression": "^ROUND\\(AN\\d+\\+BC\\d+\\+BD\\d+\\+BE\\d+\\+BF\\d+\\+BG\\d+\\+BH\\d+,2\\)$"
      }
    

完整範例請參考 Sample

安裝

不需要特別的安裝,在此獲取ept.exe,或git pull程式碼後生成可執行檔案

執行

  1. 進入可執行檔案所在目錄,並執行
  • 若要匯出至Sqlite,請確保相同目錄下包含e_sqlite3.dll
  • 若要匯出至SQL server,請確保相同錄下包含Microsoft.Data.SqlClient.SNI.dll

參數列:

引數 含義 用法
-p PatternFile 指定一個Pattern檔案(Json), 作為轉換的模型檔案
-i Input 指定一個Excel檔案路徑,此檔案將作為匯入資料來源
支援Xls或者Xlsx檔案
-o Output 指定一個路徑,或Sql連線字串作為匯出目標
當指定 -d 引數為sqlserver, sqlite, mysql時,需指定為連線字串;
當指定 -d 引數為excel時,需指定為將要另存的Excel檔案路徑,支援Xls或者Xlsx檔案
-s Source 值為excel
-d Destination 值為excel, sqlserver, sqlite或者mysql
-w WaitAtEnd 指定時,程式執行完成後,將等待使用者輸入退出
-h Help 檢視幫助

匯出至Sqlite的Sample

.\ept.exe -p .\sample\pattern.json -i .\sample\test.xlsx -o "Data Source=mato.db" -s excel -d sqlite

匯出至Excel的Sample

.\ept.exe -p .\sample\pattern.json -i .\sample\test.xlsx -o .\sample\output.xlsx -s excel -d excel
  1. 等待程式執行完畢

結果

將在-o 引數指定的地址生成資料
生成至Excel

生成至Sqlite

其他

設定

ept.exe 相同目錄下新建appsettings.json可自定義設定,若無此檔案將採用自定義樣式設定,如下:

{
  "HeaderDefaultStyle": {
    "DefaultFontName": "宋體",
    "DefaultFontColor": "#FFFFFF",
    "DefaultFontSize": 10,
    "DefaultBorderColor": "#000000",
    "DefaultBackColor": "#888888"
  },
  "BodyDefaultStyle": {
    "DefaultFontName": "宋體",
    "DefaultFontColor": "#000000",
    "DefaultFontSize": 10,
    "DefaultBorderColor": "#000000",
    "DefaultBackColor": "#FFFFFF"
  },
  "CellComment": {
    "DefaultAuthor": "Linxiao"

  }
}

可延伸性

檢驗提供類ValidatorProvider類具有一定的擴充套件功能,
InitConventions方法對校驗行為進行初始化,預設提供RegularExpression,LambdaExpression對應的委託函數分別實現了正規表示式校驗和普通表示式校驗,重寫InitConventions可實現一個自定義方式校驗

Sample:

public override Dictionary<string, ValidateConvention> InitConventions()
{

    var defaultConventions = base.InitConventions();
    //x 為當前列輪詢的欄位規則PatternItem物件,
    //e 為當前行輪詢的Entity物件
    //返回ProcessResult作為校驗結果
    defaultConventions.Add("MyExpression", new ValidateConvention((x, e) =>
    {
        //再此編寫自定義校驗功能
        //可用 x.PropName(或PropertyTypeMaper(x.PropName)) 獲取當前列輪詢的欄位(Excel表頭)名稱
        //返回ProcessResult作為校驗結果,IsValidated設定為true表示校驗通過
        x.Validation.ProcessResult.IsValidated = true;
        return x.Validation.ProcessResult;
    }));

    return defaultConventions;
}

Todo

  1. 從資料庫匯入
  2. ept帶UI版本(WPF)

工具

Roslyn Syntax Tool

  • 此工具能將C#程式碼,轉換成使用語法工廠構造器(SyntaxFactory)生成等效語法樹程式碼

已知問題

作者資訊

作者:林小

郵箱:[email protected]

License

The MIT License (MIT)

專案地址

Github:ExcelPatternTool