• ベストアンサー

RGB値をExcelにエクスポートできませんか?

quenistaの回答

  • ベストアンサー
  • quenista
  • ベストアンサー率28% (122/425)
回答No.9

>CSV形式のデータを使うだけなら、C等でツールを作ればデータとしては、作れますが...。 取りあえず、簡単に作ってみましたので、以下に貼ってみます。(一応、BCCで動作は確認しました。) ------------------------------ /* BMP to CSV Convert */ /* Present from Quenista */ /* 2001/12/14-2001/12/14 */ #define VERSION (1.00) #define HELP_STRINGS "BMP2CSV _InputFile_ [_OutoutFile_]\n" #include <dos.h> #include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdarg.h> /* BMP Data Format */ typedef struct BmpFileHeader{ unsigned char szType[2]; /* 'BM' Strings */ unsigned long ulSize; /* Hedder+Infomation+Pallet+Data Size */ unsigned short usReserved1; /* Reserved */ unsigned short usReserved2; /* Reserved */ unsigned long ulOffBits; /* Hedder+Infomation+Pallet Size */ }BMHD; typedef struct BmpInfomation{ unsigned long ulSize; /* Infomation Data Size */ unsigned long ulWidth; /* X Pixel Size */ unsigned long ulHeight; /* Y Pixel Size */ unsigned short usPlanes; unsigned short usBitCount; /* 1Pixel Bits Size */ unsigned long ulCompression; unsigned long ulSizeImage; /* Data Byte Size */ unsigned long ulXPelsPerMeter; /* X Pixel/Meter */ unsigned long ulYPelsPerMeter; /* Y Pixel/Meter */ unsigned long ulClrUsed; unsigned long ulClrImportant; }BMIF; typedef struct PalletInfomation{ unsigned char ucB; unsigned char ucG; unsigned char ucR; unsigned char ucC; }PLIF; void error_exit(char *str,...) { int iError; iError=(errno==(int)NULL)?-1:errno; fputc('\n',stderr); fprintf(stderr,str); fputc('\n',stderr); fcloseall(); exit(iError); } int bmp_csv(FILE *fpOutput,FILE *fpInput) { int iLoop; int iLoopX,iLoopY,iPallet; unsigned long ulBmpDataStack; BMHD bmhdBmpHedder; BMIF bmifBmpInfomation; PLIF plifBmpPallet[256]; PLIF plifPallet; /* Get BMP Headder */ fread((void *)&bmhdBmpHedder,sizeof(BMHD),1,fpInput); if(strncmp(bmhdBmpHedder.szType,"BM",2)!=0) error_exit("Bmp Data Error!"); fread((void *)&bmifBmpInfomation,sizeof(BMIF),1,fpInput); /* Get BMP Pallet */ for(iLoop=0;iLoop<(int)((bmhdBmpHedder.ulOffBits-(sizeof(BMHD)+sizeof(BMIF)))/4);iLoop++){ fread((void *)&plifBmpPallet[iLoop],sizeof(PLIF),1,fpInput); } /* Make CSV Hedder */ for(iLoop=0;iLoop<(int)bmifBmpInfomation.ulWidth;iLoop++){ fprintf(fpOutput,"B,G,R,"); } fprintf(fpOutput,"\n"); /* Get Map Data */ for(iLoopY=0;iLoopY<(int)bmifBmpInfomation.ulHeight;iLoopY++){ for(iLoopX=0;iLoopX<(int)bmifBmpInfomation.ulWidth;iLoopX++){ if((iLoopX%(8/bmifBmpInfomation.usBitCount))==0){ fread((char *)&ulBmpDataStack,((bmifBmpInfomation.usBitCount+7)/8),1,fpInput); } if(bmifBmpInfomation.usBitCount<=8){ iPallet=(unsigned char)(ulBmpDataStack&(~(0xFF>>bmifBmpInfomation.usBitCount)))>>(8-bmifBmpInfomation.usBitCount); plifPallet.ucB=plifBmpPallet[iPallet].ucB; plifPallet.ucR=plifBmpPallet[iPallet].ucR; plifPallet.ucG=plifBmpPallet[iPallet].ucG; ulBmpDataStack<<=bmifBmpInfomation.usBitCount; } else{ plifPallet.ucB=(unsigned char)(ulBmpDataStack&(~(0xFF<<(bmifBmpInfomation.usBitCount/3)))); ulBmpDataStack>>=((bmifBmpInfomation.usBitCount/3)-1); plifPallet.ucR=(unsigned char)(ulBmpDataStack&(~(0xFF<<(bmifBmpInfomation.usBitCount/3)))); ulBmpDataStack>>=((bmifBmpInfomation.usBitCount/3)-1); plifPallet.ucG=(unsigned char)(ulBmpDataStack&(~(0xFF<<(bmifBmpInfomation.usBitCount/3)))); ulBmpDataStack>>=((bmifBmpInfomation.usBitCount/3)-1); } fprintf(fpOutput,"%03d,%03d,%03d,",plifPallet.ucB,plifPallet.ucR,plifPallet.ucG); } fprintf(fpOutput,"\n"); } fclose(fpInput); fclose(fpOutput); return 0; } void main(unsigned int argc,unsigned char *args[]) { FILE *fpInput; FILE *fpOutput; unsigned int uiCount; printf("BMP to CSV Convert Tool Version %.2f Copyright(c) Quenista\n",VERSION); /* Initial */ uiCount=1; if(argc<2) error_exit(HELP_STRINGS); while(args[uiCount][0]=='-'){ switch(args[uiCount][1]){ default : error_exit(HELP_STRINGS); break; } uiCount++; } if((fpInput=fopen(args[uiCount],"rb"))==NULL) error_exit("Input File Open Error!"); uiCount++; if(argc>uiCount){ if((fpOutput=fopen(args[uiCount],"w+b"))==NULL) error_exit("Output File Open Error!"); } else{ fpOutput=stdout; } if(bmp_csv(fpOutput,fpInput)!=0) error_exit("Abnormal End!"); fcloseall(); printf("Convert End!\n"); } ------------------------------ 取りあえず、普通のコンパイラなら通ると思いますが、コンパイル時オプションにバイトのAlignだけ注意が必要です。

関連するQ&A

  • エクセルのエクスポート

     エクセルのエクスポートでブックを変えずにどんどん追加したいのですがどうすれば良いでしょうか エクセル2002です。

  • 「Excelにエクスポート」ができない

    IE9をインストールしたら「Excelにエクスポート」ができなくなりました。試しにIE8に戻したらこれまで通りできます。IE9でもエクスポートできるようにするにはどうしたらいいでしょうか?(Win7HomePremium ・Excel2007を使っています)よろしくお願いします。

  • HPのデータをEXCELにエクスポートしたい、、

    HPのデータをEXCELにエクスポートしたいのですが、 画像形式(GIF)のものはできるのでしょうか? また、できるのなら、どうやってするのでしょうか? また、できないとしても、どうにか工夫して、手写しより簡単にできる方法ないでしょうか? よろしくお願いします。

  • AccessからEXCELへのエクスポート・・・みたいな・・・・

    accessからexcelへのデータエクスポートなのですが・・・ excelへの指定されたセルへのエクスポートならわかるのですが・・・ accessのデータ量(レコード数)が変化するので・・・その方法がわかりません・・・ 教えてください・・・。

  • ACCESSからエクセルへのエクスポート

    非常に困っています。どなたか教えて下さい。 エクセルのCSVファイルからアクセスのテーブルにデータをインポートして そのテーブルから新しいエクセルファイルにデータをエクスポートします。 (1)エクセルの元ファイル 列1 数値 1桁 (2)アクセスにインポート(インポート定義)        列1 数値型 1桁                 書式で3桁にする。 (3)エクセルにエクスポート(エクスポート定義)  列1 1桁になってしまいます。 ※(2)までは書式に000を入れることで解決しました。   (3)にエクスポートした状態で 列1を3桁にしたいのです                     例えば0→000 ちなみにアクセスは2002を使用しています。 どなたか教えて下さい。本当に困っています。

  • エクセルをワードへエクスポート

    エクセルをワードへエクスポートしたいんですが アクセスを持ってません。 他にエクスポートできるようなソフトってありますか? 出来れば無料ダウンロードできるようなのがあれば大変助かるんですが。

  • ACCESSからEXCELにエクスポートしたい!

    かなり困っています... ACCESSからEXCELにデータをエクスポートしたいのですが、ACCESS側の テーブルの中身すべてをEXCELに吐き出すのではなくて、1レコードづつ エクスポートしたいのです。 やりたいことは... ACCESS側のテーブルをEXCELにエクスポートする際、あらかじめ、テーブルの 一つのフィールド(部門コード)を昇順に並べておいて、エクスポートしていきながら、部門コードが変わったら、それまでの部門の金額の合計を出し、その合計もエクスポートして、次の部門に進み、最終的に金額の総合計をだそうと考えています。 この部分をVBAで組もうと考えているのですが... エクセルのレイアウトを簡単に書くと 部門 100      名称    金額            aaa  1000      bbb 500 合計         1500 部門 200      名称    金額            ccc  700      ddd 400 合計         1100 こんな感じです ちなみにOS WIN98 ACCESS2000,EXCEL2000です 皆様、よろしくお願いします。

  • Access⇒エクセルへのエクスポートについて

    Accessからエクセルへのエクスポートで質問です。 Accessのテーブルの中の一つのフィールド(名前は[合計])で、=[単価]*[数量]という計算をさせたとします。 このテーブルをエクセルにエクスポートし、エクセル上で例えば [単価]の累積合計 =SUM(**:**) [数量]の累積合計 =SUM(**:**) [合計]の累積合計 =SUM(**:**) をしたとすると、[単価]と[数量]は値が得られるのですが、Accessで計算させた[合計]は0になって値を得ることができません。 [単価]と[合計]は通貨型、[数量]は数値型に設定しています。 Accessのテーブル上では[単価]と[合計]には¥マークがついているのですが、エクセルにエクスポートすると、[単価]は¥マークがついておらず、[合計]には¥マークがついています。 Accessで計算させたフィールドは、エクセルにエクスポートした場合、数字として認識されないのでしょうか?文字になってる? うまく説明出来なくてすみませんが、Accessをエクスポートし、エクセルで加工計算を色々したいのですが、[合計]が計算出来なくて困っているという事です。 何故なのか全く判らないので教えてください。

  • ビットマップ画像をRGB値でエクセルに出力したいんですが・・・

    ビットマップ画像を取り込んで、1ピクセル毎のRGB値をエクセルに出力したいのですが、そのようなプログラムがわかる方やフリーソフトがありましたら教えて下さい!!! C#っていうのが一応手元にあります。 全くの素人でわかりづらくて申し訳ありません。。

  • エクセルからアクセスへエクスポートしたときのハイパーリンク型について

    アクセスからエクセルへのエクスポートについて テ-ブル1を ファイル→エクスポート→エクセルファイル(97-2003)にして出力 したときにハイパーリンク型が「#http://~#」 となり文字列になるのですが そのままハイパーリンク型でエクセルにエクスポートするにはどうすればいいでしょうか? 宜しくお願い致します。