みなさんこんにちは! 私たちのチームには趣味があります-3Dプリンティングが大好きです。 そして、単に愛するだけでなく、テーブルの簡単なおもちゃから中国では販売されていない詳細まで、あらゆるものを積極的に印刷します。 私たちの部屋の誰もが少なくとも一度は何かを印刷しました。
この記事では、プリンター用のプラスチックの購入の問題を解決した経験と、SpreadsheetCloudAPIがこれにどのように役立ったかをお話ししたいと思います。 カットの下の詳細。
単純なプリンターがインクを必要とするように、3Dプリンターはプラスチックを必要とします。 最初は、プリンターに付属のプラスチックで印刷しました。 それから彼らは平等に分け合い、たくさんの色とりどりのコイルを買いました。 ただし、全員が異なるボリュームで印刷するため、将来均等に分割するのは不公平です。 そのため、Excelファイルを開くだけで、誰もが各印刷物にプラスチックをどれだけ費やしたかを書き、購入中にそれぞれの割合を比例的に計算しました。
そして、すべてがうまくいきますが、時間の経過とともに、特にリモート印刷の起動を設定した後、プリンターを使用し始めた人の数が増加しました。 その結果、このExcelファイルの使用は非常に不便でした。 だから、アイデアは誰もが簡単に印刷セッションを記録できるようなプログラムを書くことから生まれ、購入する前に誰がいくらチップを入れるべきかを言った。
アプリケーションのアイデアを考える過程で、Spreadsheet Document Server: SpreadsheetCloudAPIを使用して顧客が作成するサービスに出会いました。 基本的に、現在のExcelファイルをアプリケーションの基本部分として使用でき、データストレージと計算ロジックについてはまったく考慮しません。 また、無料です。
したがって、アプリケーションから取得する必要があるもの:
- 印刷情報の入力と編集、
- 新しいユーザーを追加する機能、
- 新しい印刷材料を追加する機能(異なるプラスチックから印刷でき、すべて異なるコストがかかります)、
- さて、そして最も重要なことは、次の購入で誰がいくらお金を捨てるべきか計算を示してください。
その結果、取得するUIは次のようになります。
はい、恵みに違いはありませんが、私たちもそれを売るつもりはありません。 そして、私たちのニーズにぴったりです。
コスト計算
コストの計算における主な問題は、プラスチックがキログラム単位で販売され、メートル単位で消費されることでした。 最初はスケールを使用して各図の重量を測定することさえ考えましたが、私たちはプログラマであり、よりエレガントなものを考え出す必要があり、学校物理学コースを思い出しました。 プラスチックには密度があり、バーには直径があり、費やされた長さがわかっているので、その結果、各図の質量を計算できます。
したがって、ユーザーのアクションを最小限に抑える必要があります。印刷セッション、使用されたプラスチック、および所要時間を記録します。 それだけです! プラスチックの特性を知っていれば、問題なく重量を個別に計算できます。 そして、はい、これはすべて同じExcelファイルで実行でき、1行のコードを書く必要はありません! 利用可能な材料に関するデータを別のシートに保存し、重量計算式はそこからそれらを取得します。
実装
バックエンド
実際、バックエンドはSpreadsheetcloudAPIサービスと通信するだけです。入力されたデータをそこに転送し、ドキュメントの再カウントされた部分を受け取ります。 サーバー側を実装するために、phpが選択されました。
サービスと通信するには、次の3つのパラメーターのみが必要です。
- サービスURL-「 http://spreadsheetcloudapi.azurewebsites.net/api/spreadsheet 」、
- APIキー-サービスが提供するアプリケーションのキー、
- ファイル名。
便宜上、すべてを1つのクラスに収集しました。
class PrivateConst { const Base_Url = 'http://spreadsheetcloudapi.azurewebsites.net/api/spreadsheet'; const API_KEY = 'API_KEY'; const File_Name = '3D.xlsx'; }
サービスとの通信は、Web APIを介して行われます。 原則として、APIは非常にシンプルで、十分に文書化されています。 たとえば、テーブルにセルを追加するには(新しい印刷レコードを作成するときに必要なもの)、次の形式のJSONを送信するだけです。
{ "id": "some_id", "filename": "test", "extension": "xls", "sheetindex": 0, "sheetname": "Sheet1", "startrowindex": 0, "startcolumnindex": 0, "endrowindex": 3, "endcolumnindex": 5, "mode": "ShiftCellsDown", "formatmode": "FormatAsPrevious" }
PUTリクエストを介して/ API /スプレッドシート/挿入セルに。
データを受け取ったとき、サービス自体が必要なセルをHTML形式( Export to HTML )で提供できるため、データを解放することさえできました。 その結果、ドキュメントのデータを表示する方法について考える必要さえありません。 このHTMLを取得することも難しくありません。
function getSessionHtml($id, $sheetName, $rowLimit, $columnLimit){ $params = array( 'id' => $id, 'sheetname' => $sheetName, ); if($rowLimit > -1){ $params['endrowindex'] = $rowLimit; } if($columnLimit > -1){ $params['endcolumnindex'] = $columnLimit; } $request = get($params, '/exporttohtml'); return $request; }
getは、渡されたパラメーターとともに渡されたアドレスにGETリクエストを送信するメソッドです。
これらのメソッドのパラメーターには、$ id-ダウンロードしたファイルのセッションIDがあります。 ファイルを開くために毎回リソースを費やす必要がなくなり、コマンドとリクエストを一度に1つずつ実行できるようになり、時間とリクエストを節約できます。
フロントエンド
すでに書いたように、SpreadsheetCloudAPIサービスから既製のHTMLの形式でデータを受け取ります。 エクスポートする場合、データは表であり、このデータを編集するには、表のセルをクリックして処理し、必要なエディターに固定するだけで十分です。 値を編集するには、「入力」を使用して、既存の「選択」から値を選択します。
新しい印刷セッションを作成する場合、ユーザー名、素材名を選択し、長さの値を入力する必要があります。
もちろん、データは編集できます:
「コスト」列は編集されません。サービスで直接計算され、エクスポート中に入力されます。
材料タブでは、計算は実行されず、値のみを設定します。
[ユーザー]タブで、作成および変更するパラメーターはユーザー名のみです。 「全費用」列が計算され、編集することは意図されていません。 誰が最も印刷されているかを視覚的に示すケーキにチャートを表示することにしました。 チャートはExcelによっても描画され、サービスからの画像を単純にロードします。
以上です。 すばやく簡単に、以前に作成したExcelファイルに基づいてアプリケーションを作成しました。これにより、アプリケーションロジックを実装してデータを格納するコードを1行も記述せず、UIを作成するだけで済みました。