writeexcel 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/test/test_formula.rb CHANGED
@@ -4,7 +4,7 @@ require 'helper'
4
4
  class TC_Formula < Test::Unit::TestCase
5
5
 
6
6
  def setup
7
- @formula = Formula.new(0)
7
+ @formula = Writeexcel::Formula.new(0)
8
8
  end
9
9
 
10
10
  def test_scan
@@ -12,7 +12,7 @@ class TC_Worksheet < Test::Unit::TestCase
12
12
  @sheetname = 'test'
13
13
  @ws = @workbook.add_worksheet(@sheetname, 0)
14
14
  @perldir = "#{PERL_OUTDIR}/"
15
- @format = Format.new(:color=>"green")
15
+ @format = Writeexcel::Format.new(:color=>"green")
16
16
  end
17
17
 
18
18
  def teardown
data/writeexcel.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{writeexcel}
8
- s.version = "0.4.1"
8
+ s.version = "0.4.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Hideo NAKAMURA"]
12
- s.date = %q{2010-04-27}
12
+ s.date = %q{2010-05-20}
13
13
  s.description = %q{Multiple worksheets can be added to a workbook and formatting can be applied to cells. Text, numbers, formulas, hyperlinks and images can be written to the cells.}
14
14
  s.email = %q{cxn03651@msj.biglobe.ne.jp}
15
15
  s.extra_rdoc_files = [
data/writeexcel.rdoc CHANGED
@@ -635,12 +635,11 @@ DOSやWindowsであっても、ファイル名の区切りには'/'を使用す
635
635
  worksheet.write_formula(0, 0, '=$B$3 + B4' )
636
636
  worksheet.write_formula(1, 0, '=SIN(PI()/4)')
637
637
  worksheet.write_formula(2, 0, '=SUM(B1:B5)' )
638
- worksheet.write_formula('A4', '=IF(A3>1,"Yes", "No")' )
638
+ worksheet.write_formula('A4', '=IF(A3>1,"Yes","No")' )
639
639
  worksheet.write_formula('A5', '=AVERAGE(1, 2, 3, 4)' )
640
640
  worksheet.write_formula('A6', '=DATEVALUE("1-Jan-2001")')
641
641
 
642
642
 
643
-
644
643
  == ページセットアップメソッド
645
644
 
646
645
  印刷されたときの書式設定ですね。ヘッダ・フッタやマージンなど。
@@ -783,3 +782,601 @@ DOSやWindowsであっても、ファイル名の区切りには'/'を使用す
783
782
  format1 = workbook.add_format(font) # フォントだけ設定
784
783
  format2 = workbook.add_format(font, shading) # 両方を設定
785
784
 
785
+ ===FORMATメソッド
786
+
787
+ Formatクラスのメソッドの詳細は改めて説明がある。加えて、gem の examples
788
+ ディレクトリの formats.rb を実行して得られる formats.xls には、ほとんど
789
+ すべての書式設定例があるので見ていただきたい。
790
+
791
+ 以下のメソッドがあります。
792
+
793
+ set_font
794
+ set_size
795
+ set_color
796
+ set_bold
797
+ set_italic
798
+ set_underline
799
+ set_font_strikeout
800
+ set_font_script
801
+ set_font_outline
802
+ set_font_shadow
803
+ set_num_format
804
+ set_locked
805
+ set_hidden
806
+ set_align
807
+ set_rotation
808
+ set_text_wrap
809
+ set_text_justlast
810
+ set_center_across
811
+ set_indent
812
+ set_shrink
813
+ set_pattern
814
+ set_bg_color
815
+ set_fg_color
816
+ set_border
817
+ set_bottom
818
+ set_top
819
+ set_left
820
+ set_right
821
+ set_border_color
822
+ set_bottom_color
823
+ set_top_color
824
+ set_left_color
825
+ set_right_color
826
+
827
+ これらは、プロパティとして直接指定することもできます。例えば、
828
+
829
+ format = workbook.add_format
830
+ format.set_bold
831
+
832
+ は、
833
+
834
+ format = workbook.add_format(:bold => 1)
835
+
836
+ と同じことになります。
837
+
838
+ ===色の扱い
839
+
840
+ エクセルは56色のカラーパレットを提供しています。WriteExcelでは、8から63までの
841
+ パレットインデックスを通じてアクセスできます。このインデックスは、フォント、背景色、
842
+ 枠線などの色の設定に用いられます。
843
+
844
+ format = workbook.add_format(
845
+ :color => 12, # index for blue
846
+ :font => 'MS 明朝',
847
+ :size => 12,
848
+ :bold => 1
849
+ )
850
+
851
+ よく用いられる色は、色の名前の文字列でも指定できます。文字列の大文字小文字は問いません。
852
+
853
+ 'black' => 8
854
+ 'blue' => 12
855
+ 'brown' => 16
856
+ 'cyan' => 15
857
+ 'gray' => 23
858
+ 'green' => 17
859
+ 'lime' => 11
860
+ 'magenta' => 14
861
+ 'navy' => 18
862
+ 'orange' => 53
863
+ 'pink' => 33
864
+ 'purple' => 20
865
+ 'red' => 10
866
+ 'silver' => 22
867
+ 'white' => 9
868
+ 'yellow' => 13
869
+
870
+ 使用例:
871
+
872
+ font = workbook.add_format(:color => 'red')
873
+
874
+ 求める色が既定色にない場合は、Workbook#set_custom_colorによりRGB(red green blue)を指定
875
+ してオーバーライドすることができます。
876
+
877
+ ferrari = workbook.set_custom_color(40, 216, 12, 12)
878
+
879
+ format = workbook.add_format(
880
+ :bg_color => ferrari,
881
+ :pattern => 1,
882
+ :border => 1
883
+ )
884
+
885
+ worksheet.write_blank('A1', format)
886
+
887
+ 以下のリンクが参考になるでしょう。
888
+
889
+ エクセルのカラーパレットについて詳しく見る。
890
+ http://www.mvps.org/dmcritchie/excel/colors.htm
891
+
892
+ A decimal RGB chart: http://www.hypersolutions.org/pages/rgbdec.html
893
+
894
+ A hex RGB chart: : http://www.hypersolutions.org/pages/rgbhex.html
895
+
896
+ ===DATES AND TIME IN EXCEL
897
+
898
+ エクセルでの日付・時刻について2つの重要なことがあります。
899
+
900
+ 1. エクセルの日付・時刻は正の実数形式である。
901
+
902
+ 2. WriteExcel は、Worksheet#write によって与えられた日付・時刻を表す文字列を
903
+ 自動的には日付・時刻データとして変換しない。
904
+
905
+ この2点について、どのように求められる書式で日付・時刻として表示するのか、
906
+ いくつかのサジェスチョンを以下に示します。
907
+
908
+ ====エクセルの日付・時刻は数値と書式
909
+
910
+ 文字列をWorksheet#writeで書き込んだ場合、それはあくまで文字列です。
911
+
912
+ worksheet.write('A1', '02/03/04') # !! Writes a string not a date. !!
913
+
914
+ エクセルでの日付・時刻にあたるのは実数です。
915
+ "Jan 1 2001 12:30 AM" は、36892.521です。
916
+
917
+ 整数部分はエポックからの日数であり、小数部分は一日のうち経過した時間のパーセンテージ
918
+ です。
919
+ いくつか例を載せます。
920
+
921
+ #!/usr/bin/ruby -w
922
+
923
+ require 'writeexcel'
924
+
925
+ workbook = WriteExcel.new('date_examples.xls')
926
+ worksheet = workbook.add_worksheet
927
+
928
+ worksheet.set_column('A:A', 30) # For extra visibility.
929
+
930
+ number = 39506.5
931
+
932
+ worksheet.write('A1', number) # 39506.5
933
+
934
+ format2 = workbook.add_format(:num_format => 'dd/mm/yy')
935
+ worksheet.write('A2', number , format2); # 28/02/08
936
+
937
+ format3 = workbook.add_format(:num_format => 'mm/dd/yy')
938
+ worksheet.write('A3', number , format3); # 02/28/08
939
+
940
+ format4 = workbook.add_format(:num_format => 'd-m-yyyy')
941
+ worksheet.write('A4', .number , format4) # 28-2-2008
942
+
943
+ format5 = workbook.add_format(:num_format => 'dd/mm/yy hh:mm')
944
+ worksheet.write('A5', number , format5) # 28/02/08 12:00
945
+
946
+ format6 = workbook.add_format(:num_format => 'd mmm yyyy')
947
+ worksheet.write('A6', number , format6) # 28 Feb 2008
948
+
949
+ format7 = workbook.add_format(:num_format => 'mmm d yyyy hh:mm AM/PM')
950
+ worksheet.write('A7', number , format7) # Feb 28 2008 12:00 PM
951
+
952
+ ====WriteExcel は日付・時刻風の文字列を自動的に日付・時刻には変換しない
953
+
954
+ WriteExcel は、日付・時刻風の文字列から日付・時刻の実数への変換を自動的には
955
+ 行いません。多くの書式があるため、また、解釈ミスを行う可能性があるためです。
956
+
957
+ 例えば、02/03/04 は 2002年3月4日/2004年2月3日/2004年3月2日いずれか判別できません。
958
+
959
+ ですから、日付を扱うためには本来であれば数値に変換し、書式を指定して渡す必要があります。
960
+
961
+ しかし、数値に変換するのも大変ですから、ISO8601の形式(yyyy-mm=ddThh:mm:ss.sss)の文字列で
962
+ 表し、Worksheet#write_date_timeで書き込む方法が用意されています。
963
+
964
+ worksheet.write_date_time('A2', '2001-01-01T12:20', format)
965
+
966
+ 詳しくはWorksheet#write_date_time のドキュメントを参照ください。
967
+
968
+ #!/usr/bin/ruby -w
969
+
970
+ require 'writeexcel'
971
+
972
+ workbook = WriteExcel.new('example.xls')
973
+ worksheet = workbook.add_worksheet
974
+
975
+ # Set the default format for dates.
976
+ date_format = workbook.add_format(:num_format => 'mmm d yyyy')
977
+
978
+ # Increase column width to improve visibility of data.
979
+ worksheet.set_column('A:C', 20)
980
+
981
+ data = [
982
+ %w(Item Cost Date),
983
+ %w(Book 10 1/9/2007),
984
+ %w(Beer 4 12/9/2007),
985
+ %w(Bed 500 5/10/2007)
986
+ ]
987
+
988
+ # Simulate reading from a data source.
989
+ row = 0
990
+
991
+ data.each do |row_data|
992
+ col = 0
993
+ row_data.each do |item|
994
+
995
+ # Match dates in the following formats: d/m/yy, d/m/yyyy
996
+ if item =~ %r[^(\d{1,2})/(\d{1,2})/(\d{4})$]
997
+ # Change to the date format required by write_date_time().
998
+ date = sprintf "%4d-%02d-%02dT", $3, $2, $1
999
+ worksheet.write_date_time(row, col, date, date_format)
1000
+ else
1001
+ # Just plain data
1002
+ worksheet.write(row, col, item)
1003
+ end
1004
+ col += 1
1005
+ end
1006
+ row += 1
1007
+ end
1008
+
1009
+ ===エクセルにおけるグループとアウトライン
1010
+
1011
+ エクセルでは、行や桁をグループ化し、ワンクリックで表示・非表示を行うことができます。
1012
+ この昨日はアウトラインと関係があります。
1013
+
1014
+ ------------------------------------------
1015
+ 1 2 3 | | A | B | C | D | ...
1016
+ ------------------------------------------
1017
+ _ | 1 | A | | | | ...
1018
+ | _ | 2 | B | | | | ...
1019
+ | | | 3 | (C) | | | | ...
1020
+ | | | 4 | (D) | | | | ...
1021
+ | - | 5 | E | | | | ...
1022
+ | _ | 6 | F | | | | ...
1023
+ | | | 7 | (G) | | | | ...
1024
+ | | | 8 | (H) | | | | ...
1025
+ | - | 9 | I | | | | ...
1026
+ - | . | ... | ... | ... | ... | ...
1027
+
1028
+ レベル2のマイナス記号をクリックすると次のようになります。
1029
+
1030
+ ------------------------------------------
1031
+ 1 2 3 | | A | B | C | D | ...
1032
+ ------------------------------------------
1033
+ _ | 1 | A | | | | ...
1034
+ | | 2 | B | | | | ...
1035
+ | + | 5 | E | | | | ...
1036
+ | | 6 | F | | | | ...
1037
+ | + | 9 | I | | | | ...
1038
+ - | . | ... | ... | ... | ... | ...
1039
+
1040
+ さらにレベル1のマイナス記号をクリックすると次のようになります。
1041
+
1042
+ ------------------------------------------
1043
+ 1 2 3 | | A | B | C | D | ...
1044
+ ------------------------------------------
1045
+ | 1 | A | | | | ...
1046
+ + | . | ... | ... | ... | ... | ...
1047
+
1048
+ WriteExcel におけるグループ化は、Worksheet#set_row や Worksheet#set_column
1049
+ を通じて行うことができます。
1050
+
1051
+ set_row(row, height, format, hidden, level, collapsed)
1052
+ set_column(first_col, last_col, width, format, hidden, level, collapsed)
1053
+
1054
+ 次の例では、行1と行2、桁BからGまでににアウトラインレベル1を設定しています。
1055
+ hidden や format が nil の時は、デフォルトの値が用いられます。
1056
+
1057
+ worksheet.set_row(1, nil, nil, 0, 1)
1058
+ worksheet.set_row(2, nil, nil, 0, 1)
1059
+ worksheet.set_column('B:G', nil, nil, 0, 1)
1060
+
1061
+ エクセルではアウトラインレベル7まで用いることができます。ですから、パラメータ level は
1062
+ 0以上7以下でなければなりません。
1063
+
1064
+ 行、桁は hidden フラグをセットすることで折りたたむことができます。その場合、
1065
+ フラグをセットした行、桁は+記号が付いて折りたたまれます。
1066
+
1067
+ worksheet.set_row(1, nil, nil, 1, 1)
1068
+ worksheet.set_row(2, nil, nil, 1, 1)
1069
+ worksheet.set_row(3, nil, nil, 0, 0, 1) # Collapsed flag.
1070
+
1071
+ worksheet.set_column('B:G', nil, nil, 1, 1)
1072
+ worksheet.set_column('H:H', nil, nil, 0, 0, 1) # Collapsed flag.
1073
+
1074
+ Note: collapsed フラグをセットすることは、OpenOffice.orgやGnumeric との互換性上
1075
+ 特に重要です。
1076
+
1077
+ examplesディレクトリの outline.rb 及び outline_collapsed.rb をご覧ください。
1078
+
1079
+ ===エクセルのデータ検証(データ-入力規則)
1080
+
1081
+ データ検証は、ユーザのセルへの入力データを制限し、ヘルプやワーニングを
1082
+ 表示するエクセルの機能です。ドロップダウンリストで入力値を制限することもできます。
1083
+
1084
+ 一定の範囲内の整数に入力値を制限する際に、必要な値についてメッセージを表示し、
1085
+ 範囲外の時はワーニングを表示するなどの使い方が典型的な使用例でしょう。
1086
+ WriteExcel では次のようにします。
1087
+
1088
+ worksheet.data_validation('B3',
1089
+ {
1090
+ :validate => 'integer',
1091
+ :criteria => 'between',
1092
+ :minimum => 1,
1093
+ :maximum => 100,
1094
+ :input_title => '整数値を入力:',
1095
+ :input_message => '1以上100以下',
1096
+ :error_message => 'すいません、もう一度お願いします。'
1097
+ })
1098
+
1099
+ データ検証についてさらなる情報は、以下を参照のこと。
1100
+ "Description and examples of data validation in Excel":
1101
+ http://support.microsoft.com/kb/211485.
1102
+
1103
+ ===エクセルの数式と関数
1104
+
1105
+ ====注意
1106
+
1107
+ 数式及び関数の実装に際して、いくつか未解決の問題があります。
1108
+
1109
+ 1.数式を書き込むのは、文字列を書き込むのと比べ非常に遅いです。
1110
+ 2.関数内で{1;2;3}といった配列形式の定数は使えません。
1111
+ 3.単項演算子の「-」(マイナス)は、「-1*」と解釈されます。例:-SIN(PI()) => -1*SIN(PI())
1112
+ 4.演算子前後に空白は入れないでください。
1113
+ 5.名前付きレンジは未サポートです。
1114
+ 6.配列数式は未サポートです。
1115
+
1116
+ ====イントロダクション
1117
+
1118
+ 数式は、等号で始まる文字列です。
1119
+
1120
+ '=A1+B1'
1121
+ '=AVERAGE(1, 2, 3)'
1122
+
1123
+ 数式には、数値、文字列、真偽値、セル参照、セル範囲、関数を含むことができます。
1124
+ 名前付き範囲はまだサポートされていません。
1125
+ 数式はエクセルで記載するときと同様、セルや関数は大文字にする必要があります。
1126
+
1127
+ セルはA1形式で表します。桁はAからIVまで(0から255まで)。行は1から
1128
+ 65536までです。
1129
+
1130
+ 「$」による絶対指定もサポートしています。
1131
+
1132
+ '=A1' # Column and row are relative
1133
+ '=$A1' # Column is absolute and row is relative
1134
+ '=A$1' # Column is relative and row is absolute
1135
+ '=$A$1' # Column and row are absolute
1136
+
1137
+ 数式では他のシートのセルを参照することもできます。
1138
+
1139
+ '=Sheet2!A1'
1140
+ '=Sheet2!A1:A5'
1141
+ '=Sheet2:Sheet3!A1'
1142
+ '=Sheet2:Sheet3!A1:A5'
1143
+ q{='Test Data'!A1}
1144
+ q{='Test Data1:Test Data2'!A1}
1145
+
1146
+ シート参照とセル参照は「!」で区切られます。ワークシート名に空白やコンマ、括弧
1147
+ が含まれる場合、シングルクオートで囲う必要があります(上記例の末尾2例参照)。
1148
+ 他のワークブックに含まれるシートを参照することはできません。
1149
+
1150
+ 以下にエクセルの数式で使うことができる演算子を示します。
1151
+ ほとんど Ruby と同様ですが、異なるものには注記してあります。
1152
+ Arithmetic operators:
1153
+ =====================
1154
+ Operator Meaning Example
1155
+ + Addition 1+2
1156
+ - Subtraction 2-1
1157
+ * Multiplication 2*3
1158
+ / Division 1/4
1159
+ ^ Exponentiation 2^3 # べき乗
1160
+ - Unary minus -(1+2) # -1*(1+2)を解釈される。
1161
+ % Percent (Not modulus) 13% # パーセント。サポートしていない。
1162
+
1163
+ Comparison operators:
1164
+ =====================
1165
+ Operator Meaning Example
1166
+ = Equal to A1 = B1 # ==
1167
+ <> Not equal to A1 <> B1 # !=
1168
+ > Greater than A1 > B1
1169
+ < Less than A1 < B1
1170
+ >= Greater than or equal to A1 >= B1
1171
+ <= Less than or equal to A1 <= B1
1172
+
1173
+ String operator:
1174
+ ================
1175
+ Operator Meaning Example
1176
+ & Concatenation "Hello " & "World!" # 文字列の連結。
1177
+
1178
+ Reference operators:
1179
+ ====================
1180
+ Operator Meaning Example
1181
+ : Range operator A1:A4
1182
+ , Union operator SUM(1, 2+2, B3)
1183
+
1184
+ The range and comma operators can have different symbols in non-English
1185
+ versions of Excel. These will be supported in a later version of WriteExcel.
1186
+ European users of Excel take note:
1187
+
1188
+ worksheet.write('A1', '=SUM(1; 2; 3)') # Wrong!!
1189
+ worksheet.write('A1', '=SUM(1, 2, 3)') # Okay
1190
+
1191
+ 以下にはExcel5及びWriteExcelでサポートされている関数を示します。
1192
+
1193
+ ABS DB INDIRECT NORMINV SLN
1194
+ ACOS DCOUNT INFO NORMSDIST SLOPE
1195
+ ACOSH DCOUNTA INT NORMSINV SMALL
1196
+ ADDRESS DDB INTERCEPT NOT SQRT
1197
+ AND DEGREES IPMT NOW STANDARDIZE
1198
+ AREAS DEVSQ IRR NPER STDEV
1199
+ ASIN DGET ISBLANK NPV STDEVP
1200
+ ASINH DMAX ISERR ODD STEYX
1201
+ ATAN DMIN ISERROR OFFSET SUBSTITUTE
1202
+ ATAN2 DOLLAR ISLOGICAL OR SUBTOTAL
1203
+ ATANH DPRODUCT ISNA PEARSON SUM
1204
+ AVEDEV DSTDEV ISNONTEXT PERCENTILE SUMIF
1205
+ AVERAGE DSTDEVP ISNUMBER PERCENTRANK SUMPRODUCT
1206
+ BETADIST DSUM ISREF PERMUT SUMSQ
1207
+ BETAINV DVAR ISTEXT PI SUMX2MY2
1208
+ BINOMDIST DVARP KURT PMT SUMX2PY2
1209
+ CALL ERROR.TYPE LARGE POISSON SUMXMY2
1210
+ CEILING EVEN LEFT POWER SYD
1211
+ CELL EXACT LEN PPMT T
1212
+ CHAR EXP LINEST PROB TAN
1213
+ CHIDIST EXPONDIST LN PRODUCT TANH
1214
+ CHIINV FACT LOG PROPER TDIST
1215
+ CHITEST FALSE LOG10 PV TEXT
1216
+ CHOOSE FDIST LOGEST QUARTILE TIME
1217
+ CLEAN FIND LOGINV RADIANS TIMEVALUE
1218
+ CODE FINV LOGNORMDIST RAND TINV
1219
+ COLUMN FISHER LOOKUP RANK TODAY
1220
+ COLUMNS FISHERINV LOWER RATE TRANSPOSE
1221
+ COMBIN FIXED MATCH REGISTER.ID TREND
1222
+ CONCATENATE FLOOR MAX REPLACE TRIM
1223
+ CONFIDENCE FORECAST MDETERM REPT TRIMMEAN
1224
+ CORREL FREQUENCY MEDIAN RIGHT TRUE
1225
+ COS FTEST MID ROMAN TRUNC
1226
+ COSH FV MIN ROUND TTEST
1227
+ COUNT GAMMADIST MINUTE ROUNDDOWN TYPE
1228
+ COUNTA GAMMAINV MINVERSE ROUNDUP UPPER
1229
+ COUNTBLANK GAMMALN MIRR ROW VALUE
1230
+ COUNTIF GEOMEAN MMULT ROWS VAR
1231
+ COVAR GROWTH MOD RSQ VARP
1232
+ CRITBINOM HARMEAN MODE SEARCH VDB
1233
+ DATE HLOOKUP MONTH SECOND VLOOKUP
1234
+ DATEVALUE HOUR N SIGN WEEKDAY
1235
+ DAVERAGE HYPGEOMDIST NA SIN WEIBULL
1236
+ DAY IF NEGBINOMDIST SINH YEAR
1237
+ DAYS360 INDEX NORMDIST SKEW ZTEST
1238
+
1239
+ 上記数式や関数についての文法はエクセルのヘルプなどを参照ください。
1240
+
1241
+ WriteExcel で数式がうまく機能しない場合、以下を確認ください。
1242
+
1243
+ 1.エクセルやGnumeric, OpenOffice.orgでその数式が動くこと。
1244
+ 2.注意の項で示した制限に該当しないこと
1245
+ 3.セル参照や関数名が大文字で記述されていること
1246
+ 4.範囲にはコロンが使われていること A1:A4.
1247
+ 5.引数区切りにはコンマが使われていること SUM(1,2,3).
1248
+ 6.上記で示した関数であること
1249
+
1250
+ 上記を満たしていて、なおかつ問題がある場合は、
1251
+ cxn03651@msj.biglobe.ne.jp にお知らせください。
1252
+
1253
+ ====数式を使う際のパフォーマンス改善
1254
+
1255
+ WriteExcel でたくさんの数式を書き込む場合、とても時間がかかります。
1256
+ これは、現在の実装ではそれぞれの数式ごとに解釈されるためです。
1257
+
1258
+ しかしながら、以下のように同じような式を書き込んでいるのであれば改善策は
1259
+ あります。
1260
+
1261
+ worksheet.write_formula('B1', '=A1 * 3 + 50', format)
1262
+ worksheet.write_formula('B2', '=A2 * 3 + 50', format)
1263
+ ...
1264
+ ...
1265
+ worksheet.write_formula('B99', '=A999 * 3 + 50', format)
1266
+ worksheet.write_formula('B1000', '=A1000 * 3 + 50', format)
1267
+
1268
+ この例では、セル参照がA1からA1000まで順に変化しています。
1269
+ こういうときは、Wordsheet#store_formulaとWorksheet#repeat_formulaを使って、
1270
+ 一度解釈したものを再利用することができます。
1271
+
1272
+ formula = worksheet.store_formula('=A1 * 3 + 50')
1273
+
1274
+ (0...1000).each do |row|
1275
+ worksheet.repeat_formula(row, 1, formula, format, 'A1', 'A' + (row +1).to_s)
1276
+ end
1277
+
1278
+ とあるマシン上では、これで10倍早くなりました。
1279
+
1280
+ ===チャート
1281
+
1282
+ ====概要(チャート)
1283
+
1284
+ WriteExcelでチャートを含むエクセルファイルを作る例です。
1285
+
1286
+ #!/usr/bin/ruby -w
1287
+
1288
+ require 'writeexcel'
1289
+
1290
+ workbook = WriteExcel.new('chart.xls')
1291
+ worksheet = workbook.add_worksheet
1292
+
1293
+ chart = workbook.add_chart(:type => 'Chart::Column')
1294
+
1295
+ # Configure the chart.
1296
+ chart.add_series(
1297
+ :categories => '=Sheet1!$A$2:$A$7',
1298
+ :values => '=Sheet1!$B$2:$B$7'
1299
+ )
1300
+
1301
+ # Add the data to the worksheet the chart refers to.
1302
+ data = [
1303
+ [ 'Category', 2, 3, 4, 5, 6, 7 ],
1304
+ [ 'Value', 1, 4, 5, 2, 1, 5 ]
1305
+ ]
1306
+
1307
+ worksheet.write('A1', data)
1308
+
1309
+ workbook.close
1310
+
1311
+ ====説明(チャート)
1312
+
1313
+ チャートを使う場合、チャートのタイプを指定してWorkbook#add_chartを呼びます。
1314
+
1315
+ chart = workbook.add_chart(:type => 'Chart::Column')
1316
+
1317
+ 現在サポートされているのは、次の5つ。
1318
+
1319
+ * 'Chart::Column': Creates a column style (histogram) chart. See Column.
1320
+ * 'Chart::Bar': Creates a Bar style (transposed histogram) chart. See Bar.
1321
+ * 'Chart::Line': Creates a Line style chart. See Line.
1322
+ * 'Chart::Area': Creates an Area (filled line) style chart. See Area.
1323
+ * 'Chart::Scatter': Creates an Scatter style chart. See Scatter.
1324
+ * 'Chart::Stock': Creates an Stock style chart. See Stock.
1325
+
1326
+ More chart types will be supported in time. See the "TODO" section.
1327
+
1328
+ === チャート名とリンク
1329
+
1330
+ Chart#add_series, Chart#set_x_axis, Chart#set_y_axis, Chart#set_title メソッドは
1331
+ methods all
1332
+ support a name property. In general these names can be either a static
1333
+ string or a link to a worksheet cell. If you choose to use the name_formula
1334
+ property to specify a link then you should also the name property.
1335
+ This isn't strictly required by Excel but some third party applications
1336
+ expect it to be present.
1337
+
1338
+ chartl.set_title(
1339
+ :name => 'Year End Results',
1340
+ :name_formula => '=Sheet1!$C$1'
1341
+ )
1342
+
1343
+ These links should be used sparingly since they aren't commonly
1344
+ used in Excel charts.
1345
+
1346
+ === Chart names and Unicode
1347
+
1348
+ The add_series()), set_x_axis(), set_y_axis() and set_title() methods all
1349
+ support a name property. These names can be UTF8 strings.
1350
+
1351
+ This methodology is explained in the "UNICODE IN EXCEL" section of WriteExcel
1352
+ but is semi-deprecated. If you are using Unicode the easiest option is to
1353
+ just use UTF8.
1354
+
1355
+ === TODO(Chart)
1356
+
1357
+ Charts in WriteExcel are a work in progress. More chart types and
1358
+ features will be added in time. Please be patient. Even a small feature
1359
+ can take a week or more to implement, test and document.
1360
+
1361
+ Features that are on the TODO list and will be added are:
1362
+
1363
+ * Additional chart types. Stock, Pie and Scatter charts are next in line.
1364
+ Send an email if you are interested in other types and they will be
1365
+ added to the queue.
1366
+ * Colours and formatting options. For now you will have to make do
1367
+ with the default Excel colours and formats.
1368
+ * Axis controls, gridlines.
1369
+ * Embedded data in charts for third party application support.
1370
+
1371
+ == KNOWN ISSUES(Chart)
1372
+
1373
+ * Currently charts don't contain embedded data from which the charts
1374
+ can be rendered. Excel and most other third party applications ignore
1375
+ this and read the data via the links that have been specified. However,
1376
+ some applications may complain or not render charts correctly. The
1377
+ preview option in Mac OS X is an known example. This will be fixed
1378
+ in a later release.
1379
+ * When there are several charts with titles set in a workbook some of
1380
+ the titles may display at a font size of 10 instead of the default
1381
+ 12 until another chart with the title set is viewed.
1382
+
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 1
9
- version: 0.4.1
8
+ - 2
9
+ version: 0.4.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Hideo NAKAMURA
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-27 00:00:00 +09:00
17
+ date: 2010-05-20 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies: []
20
20