【MATLAB】 Excel 파일의 셀 폭 자동 조정

13170 단어 ExcelExcelVBAmatlab

했던 일



Excel 파일로 내보낼 때 셀 너비가 유감일 수 있습니다. 이것을 자동 조절해 보았습니다. 그러나 불행히도 MATLAB 측의 기능으로는 할 수 없기 때문에 MATLAB에서 Excel 기능을 사용합니다.

공식 페이지는 여기 : Excel을 자동화 서버로 사용한 스프레드시트 데이터 읽기

xlswrite 를 사용하고 있는 분은 「 왜 xlswrite가 더 이상 사용되지 않는가? 」의 항이 추천입니다.

Livescript 버전(MATLAB)은 GitHub: ActiveX-Excel-MATLAB 1에 있습니다.

셀 폭 조정? 구체적으로



예를 들어 table 형

코드
data = ["fileEnsembleDatastore","ds","datastore"];
data = array2table(data)



data1
data2
data3


1
"fileEnsembleDatasto...
"ds"
"datastore"


라는 데이터를 Excel로 내보냅니다.

코드
filename = 'undisiredFormat.xlsx';
writetable(data,filename);

Excel에서 열면 다소 유감스러운 느낌이 듭니다.



이것을

코드
autoFitCellWidth(filename);



그리고 데이터의 길이에 맞게 셀 폭을 조정한다는 이야기.

여담: Excel로 내보내는 함수



MATLAB에서 Excel 파일로 출력하는 함수로는 xlswrite 함수이 오랫동안 사용되었지만 최근에는
  • writetable 함수 (R2013b~): table 형 변수의 출력
  • writetimetable 함수 (R2019a~): timetable 형 변수의 출력
  • writematrix 함수 (R2019a~):array (double형/string형)의 출력
  • writecell 함수 (R2019a~): cell 배열 출력

  • 등이 권장됩니다. 마찬가지로 csvwrite 함수 역시 '비추천' 문자가 나오게 되었습니다.

    왜 xlswrite가 더 이상 사용되지 않는가?



    내보내기 속도가 다릅니다. 이 예에서는 100배 이상 다릅니다.

    코드
    data = rand(10,10);
    tic
    xlswrite('test_xlswrite.xlsx',data);
    toc
    

    Output
    経過時間は 8.999516 秒です。
    

    코드
    tic
    writematrix(data,'test_writematrix.xlsx');
    toc
    

    Output
    経過時間は 0.071814 秒です。
    

    꽤 다릅니다.

    xlswrite 함수는 Excel을 시작하므로 시간이 오래 걸립니다. 게다가 불편하게도, 여러 번 호출하면 매번 Excel을 시작하고 닫고 반복하기 때문에 시간이 많이 걸립니다. write* 시스템을 사용합시다.

    셀 폭 조정



    그런데 본제. 함수의 내용을 보는 것이 빠르네요. VBA에 익숙한 분이라면 핀이라고 올 것이라고 생각합니다만, 어떨까요.

    코드(디스플레이)
    function autoFitCellWidth(filename)
    
        % Excel ファイルへの絶対パスを取得
        filepath = which(filename);
    
        % Excel に対して ActiveX を開く
        h = actxserver('excel.application');
        wb = h.WorkBooks.Open(filepath);
    
        % UsedRange: データが入っている範囲の
        % EntireColumn: 列全体を
        % AutoFit: データに合わせた幅にします
        wb.ActiveSheet.UsedRange.EntireColumn.AutoFit;
    
        % 指定したファイル名で保存しエクセルを閉じる
        wb.SaveAs(filename);
        wb.Close;
        h.Quit;
        h.delete;
        % 注意:この辺キッチリ Close/Quit/delete しておかないとあとでややこしいです。
        %(ほかのアプリで使われていて開けない・消せないなど起こります)
        % PC 再起動すれば大丈夫です。
    end
    

    ActiveSheet 또는 UsedRange 또는 EntireColumn 등은 Excel 쪽 명령입니다. 같은 요령으로 그 밖에도 Excel이 할 수 있어 버린다.

    기타 편집 작업 예



    범위를 지정하고 같은 작업을 한다면

    코드(디스플레이)
        range = 'A1:H5';
        wbrange = wb.ActiveSheet.get('Range',range);
        wbrange.EntireColumn.AutoFit;
    

    라든지 셀 폭을 결정하고 가면

    코드(디스플레이)
        wbrange.EntireColumn.ColumnWidth = 20;
    

    등.

    나중에 셀 채우기와 문자 색상을 변경하면

    코드(디스플레이)
        % セルの塗りつぶし
        wb.ActiveSheet.UsedRange.Interior.Color=hex2dec('00FF00'); % 緑
        % フォントの色
        wb.ActiveSheet.UsedRange.Font.Color=hex2dec('0000FF'); % 赤
        % 色は16進数の BGR の組み合わせで指定
        % 赤: 0000FF
        % 青: FF00FF
        % 緑: 00FF00
        % 黒: 000000
        % 白: FFFFFF
    

    이런 느낌입니다. 다른 MATLAB Answers에는 몇 가지 예가 있습니다.

    참고


  • Office VBA Reference/Excel/Object model/Range object
  • TipsFound: VBA 열의 너비 조정
  • MATLAB Answers: ActiveX를 사용하여 Excel의 모든 셀에 이미지를 삽입할 수 있습니까?
  • MATLAB Answers: MATLAB에서 Excel Spreadsheet으로 셀 배경색이나 글꼴 색을 지정하여 데이터를 작성하려면 어떻게 해야 합니까?
  • MATLAB Answers: XLSWRITE 함수에서 지정된 워크시트만 있는 Excel 파일을 만들 수 있습니까?
  • MATLAB Answers: Excel 파일의 시트 이름을 변경할 수 있습니까?
  • Can MATLAB pre-format individual cells when writing data to an EXCEL spreadsheet?

  • Appendix: autoFitCellWidth 함수



    코드
    function autoFitCellWidth(filename)
    
        % Excel ファイルへの絶対パスを取得
        filepath = which(filename);
    
        % Excel に対して ActiveX を開く
        h = actxserver('excel.application');
        wb = h.WorkBooks.Open(filepath);
    
        % UsedRange: データが入っている範囲の
        % EntireColumn: 列全体を
        % AutoFit: データに合わせた幅にします
        wb.ActiveSheet.UsedRange.EntireColumn.AutoFit;
    
        % 指定したファイル名で保存しエクセルを閉じる
        wb.SaveAs(filename);
        wb.Close;
        h.Quit;
        h.delete;
        % 注意:この辺キッチリ Close/Quit/delete しておかないとあとでややこしいです。
        %(ほかのアプリで使われていて開けない・消せないなど起こります)
        % PC 再起動すれば大丈夫です。
    end
    
    



    Livescript에서 markdown으로의 변환은 livescript2markdown​: MATLAB's live scripts to markdown을 사용합니다.

    좋은 웹페이지 즐겨찾기