RubbyXL을 사용하여 Excel 편집 및 고객 반환

7408 단어 RubyXLRubyRails
rails로 Excel을 편집하여 고객에게 되돌려 주는 방법을 남깁니다.

만든 물건

  • 고객이 excel 파일을 업로드
  • 서버에서 받은 Excel의 변경 사항
  • 클라이언트 다운로드 변경된 파일
  • Rails로 동작 기능을 제작합니다.
    만들어진 소스 코드가 여기 있습니다.

    Excel 편집


    RubbyXL이라는 gem을 사용합니다.
    excel을 열 수 있는gem도 있어요.
  • Roo: 읽기만 가능
  • AXSLX: 신규 전용
  • 이런 느낌은 용도가 축소되었다.
    이번에는 편집할 수 있는 RubbyXL을 사용합니다.
    단일체라면 아래의 느낌으로 가능합니다.
    
    require 'rubyXL'
    
    # ファイルを読み込んでRubyXL::Workbookにデシリアライズ
    workbook = RubyXL::Parser.parse("path/to/Excel/file.xlsx")
    # ブック→シート→行→セルという構造になっている
    worksheet1 = workbook[0]
    row1 = worksheet1[0]
    cell1 = row1[0]
    # 書き込むときはWorksheetのメソッドが使える
    worksheet1.add_cell 0, 0, 'changed'
    # 保存
    workbook.save
    

    rails new


    rails 프로젝트를 제작하다.
    이번에는 가로로 모형을 만들지 않기 때문에 액티브 레코드 등 필요 없는 모듈이 생성되지 않도록 옵션을 추가한다.
    rails new -MOCJ
    

    경로


    excel 자원에 대한 경로를 만듭니다.
    또한 루트를 excels로 설정합니다.
    라우팅 방법
  • GET/-> ExcelsController#show
  • GET/excels -> ExcelsController#show
  • POST/excels -> ExcelsController#create
  • GET/excels를 통해 파일을 받는 창을 표시하고 POST/excel을 통해 서버에 파일을 업로드하고 편집해서 보냅니다.
    Rails.application.routes.draw do
      # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
      root to: "excels#show"
      resource :excel, only: [:show, :create]
    end
    

    컨트롤러


    show 방법에서는 아무것도 하지 않고 페이지만 표시합니다.
    Excel 파일이create로 전송되므로 편집하여 고객에게 전송합니다.
    class ExcelsController < ApplicationController
     def show
     end
    
     def create
       file = params[:file]
       # ファイルを開く
       workbook = RubyXL::Parser.parse file.path
       # 編集する
       workbook[0].add_cell 0, 0, 'changed'
       # 編集したファイルを送る
       send_data workbook.stream.string, type: file.content_type, filename: 'modified.xlsx'
     end
    end
    
    업로드된 파일은 UploadedFile 객체로 받을 수 있습니다.
    RubyXL::Parser.parse는 File 대상이 아니라 경로를 매개 변수로 하기 때문에 파일을 업로드하는 경로를 지정하여 RubyXL::Workbook 대상으로 변환합니다.
    업로드된 파일이tempfile로 저장됨
    UploadedFile#path를 통해 이tempfile 경로를 얻을 수 있습니다.
    편집한 파일은send-입니다.데이터 방법을 사용하여 발송하다.
    데이터로 전송되는 것은Workbook#stream에서 얻을 수 있는 이진 흐름을 Stream#string으로 문자열로 만든다.
    콘텐츠 유형을 지정해야 하지만, UploadedFile는 수신할 때의 콘텐츠 유형을 기록하기 때문에 같은 것을 지정하면 됩니다.


    Excel 파일을 업로드하는 뷰를 생성합니다.
    <%= form_tag({action: :create}, multipart: true) do %>
      <div>
      <%= file_field_tag :file %>
      </div>
      <div>
      <%= submit_tag "Send" %>
      </div>
    <% end %>
    
    파일을 선택하고 보낼 수 있습니다.
    전송된 파일은 ExcelsController#create로 처리됩니다.

    시험해 보다


    EXCEL 파일 준비

    보내드릴게요.

    편집된 파일 다운로드를 시작합니다.

    열어봐.편집된 Excel이 다운로드되었습니다.

    총결산

  • 루비XL을 통해 excel
  • 편집 가능
  • 업로드된 파일이 UploadedFile 객체에 기록됨
  • 루비XL에 저장된 워크북은 저장하지 않아도 데이터를 발송할 수 있음
  • 업로드 필름의 존재를 모르기 때문에 잘 진행될지 모르겠지만 레일스와 함께 잘 활용할 수 있다.

    좋은 웹페이지 즐겨찾기