Simply delete everything not required for poi-fast-calc
This commit is contained in:
parent
2344fa97c4
commit
597959da81
36
.classpath
36
.classpath
@ -1,36 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src/java"/>
|
||||
<classpathentry kind="src" path="src/testcases"/>
|
||||
<classpathentry kind="src" path="src/resources/main"/>
|
||||
<classpathentry kind="src" path="src/ooxml/java"/>
|
||||
<classpathentry kind="src" path="src/ooxml/testcases"/>
|
||||
<classpathentry kind="src" path="src/resources/ooxml"/>
|
||||
<classpathentry kind="src" path="src/scratchpad/src"/>
|
||||
<classpathentry kind="src" path="src/scratchpad/testcases"/>
|
||||
<classpathentry kind="src" path="src/resources/scratchpad"/>
|
||||
<classpathentry kind="src" path="src/contrib/poi-ruby/java"/>
|
||||
<classpathentry kind="src" path="src/examples/src"/>
|
||||
<classpathentry kind="src" path="src/excelant/java"/>
|
||||
<classpathentry kind="src" path="src/excelant/testcases"/>
|
||||
<classpathentry kind="src" path="src/excelant/resources"/>
|
||||
<classpathentry kind="src" path="src/integrationtest"/>
|
||||
<classpathentry kind="lib" path="lib/ant-1.9.4.jar"/>
|
||||
<classpathentry kind="lib" path="lib/ant-launcher-1.9.4.jar"/>
|
||||
<classpathentry kind="lib" path="lib/log4j-1.2.17.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="ooxml-lib/xmlbeans-2.6.0.jar"/>
|
||||
<classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
|
||||
<classpathentry kind="lib" path="lib/junit-4.12.jar"/>
|
||||
<classpathentry kind="lib" path="ooxml-lib/curvesapi-1.04.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="ooxml-lib/ooxml-schemas-1.3.jar" sourcepath="ooxml-lib/ooxml-schemas-1.3-sources.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="ooxml-lib/ooxml-security-1.1.jar" sourcepath="ooxml-lib/ooxml-security-1.1-sources.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry exported="true" kind="lib" path="compile-lib/slf4j-api-1.7.12.jar"/>
|
||||
<classpathentry kind="lib" path="compile-lib/bcpkix-jdk15on-1.54.jar"/>
|
||||
<classpathentry kind="lib" path="compile-lib/bcprov-ext-jdk15on-1.54.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="compile-lib/xmlsec-2.0.6.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-codec-1.10.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-logging-1.2.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="lib/commons-collections4-4.1.jar"/>
|
||||
<classpathentry kind="output" path="build/eclipse"/>
|
||||
</classpath>
|
18
.project
18
.project
@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>ApachePOI</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.sonar.ide.eclipse.core.sonarNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -1,2 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
@ -1,397 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.codeComplete.argumentPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.argumentSuffixes=
|
||||
org.eclipse.jdt.core.codeComplete.fieldPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.fieldSuffixes=
|
||||
org.eclipse.jdt.core.codeComplete.localPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.localSuffixes=
|
||||
org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
|
||||
org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
|
||||
org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
|
||||
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
|
||||
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
|
||||
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
|
||||
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deadCode=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deprecation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
|
||||
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
|
||||
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
|
||||
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
|
||||
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
|
||||
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
|
||||
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
|
||||
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
|
||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
|
||||
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
|
||||
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
|
||||
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
||||
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
|
||||
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
|
||||
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
|
||||
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
|
||||
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
|
||||
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
|
||||
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
|
||||
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
|
||||
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
|
||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
|
||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
|
||||
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_header=false
|
||||
org.eclipse.jdt.core.formatter.comment.format_html=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
|
||||
org.eclipse.jdt.core.formatter.comment.format_source_code=true
|
||||
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
|
||||
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
|
||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
|
||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
|
||||
org.eclipse.jdt.core.formatter.comment.line_length=80
|
||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
|
||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
|
||||
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
|
||||
org.eclipse.jdt.core.formatter.compact_else_if=true
|
||||
org.eclipse.jdt.core.formatter.continuation_indentation=2
|
||||
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
|
||||
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
|
||||
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
|
||||
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
|
||||
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
|
||||
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
|
||||
org.eclipse.jdt.core.formatter.indent_empty_lines=false
|
||||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
|
||||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
|
||||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
|
||||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
|
||||
org.eclipse.jdt.core.formatter.indentation.size=4
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
|
||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
|
||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
|
||||
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
|
||||
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
|
||||
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
|
||||
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
|
||||
org.eclipse.jdt.core.formatter.lineSplit=80
|
||||
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
|
||||
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
|
||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
|
||||
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
|
||||
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
|
||||
org.eclipse.jdt.core.formatter.tabulation.char=space
|
||||
org.eclipse.jdt.core.formatter.tabulation.size=4
|
||||
org.eclipse.jdt.core.formatter.use_on_off_tags=false
|
||||
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
|
||||
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
|
||||
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
|
||||
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
|
File diff suppressed because one or more lines are too long
@ -1,4 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.moreunit.core.anyLanguage.srcFolderPathTemplate=${srcProject}
|
||||
org.moreunit.core.anyLanguage.testFileNameTemplate=${srcFile}Test
|
||||
org.moreunit.core.anyLanguage.testFolderPathTemplate=${srcProject}
|
@ -1,4 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.moreunit.preferences.version=2
|
||||
org.moreunit.unitsourcefolder=ApachePOI\:src/java\:ApachePOI\:src/testcases\#ApachePOI\:src/java\:ApachePOI\:src/ooxml/testcases\#ApachePOI\:src/java\:ApachePOI\:src/scratchpad/testcases\#ApachePOI\:src/java\:ApachePOI\:src/excelant/testcases\#ApachePOI\:src/java\:ApachePOI\:src/integrationtest
|
||||
org.moreunit.useprojectsettings=true
|
314
build.gradle
314
build.gradle
@ -1,314 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
buildscript {
|
||||
repositories {
|
||||
maven { url "https://plugins.gradle.org/m2/" }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'me.champeau.gradle:japicmp-gradle-plugin:0.1.2'
|
||||
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.2.1"
|
||||
}
|
||||
}
|
||||
|
||||
// Only add the plugin for Sonar if enabled as it requires Java 8
|
||||
if (project.hasProperty('enableSonar')) {
|
||||
println 'Enabling Sonar support'
|
||||
apply plugin: "org.sonarqube"
|
||||
}
|
||||
|
||||
// For help converting an Ant build to a Gradle build, see
|
||||
// https://docs.gradle.org/current/userguide/ant.html
|
||||
|
||||
ant.importBuild 'build.xml'
|
||||
|
||||
/**
|
||||
|
||||
Define properties for all projects, including this one
|
||||
|
||||
*/
|
||||
allprojects {
|
||||
apply plugin: 'eclipse'
|
||||
|
||||
task wrapper(type: Wrapper) {
|
||||
gradleVersion = '3.4.1'
|
||||
}
|
||||
|
||||
task adjustWrapperPropertiesFile {
|
||||
doLast {
|
||||
ant.replaceregexp(match:'^#.*', replace:'', flags:'g', byline:true) {
|
||||
fileset(dir: project.projectDir, includes: 'gradle/wrapper/gradle-wrapper.properties')
|
||||
}
|
||||
new File(project.projectDir, 'gradle/wrapper/gradle-wrapper.properties').with { it.text = it.readLines().findAll { it }.sort().join('\n') }
|
||||
ant.fixcrlf(file: 'gradle/wrapper/gradle-wrapper.properties', eol: 'lf')
|
||||
}
|
||||
}
|
||||
wrapper.finalizedBy adjustWrapperPropertiesFile
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Define things that are only necessary in sub-projects, but not in the master-project itself
|
||||
|
||||
*/
|
||||
subprojects {
|
||||
//Put instructions for each sub project, but not the master
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'jacoco'
|
||||
|
||||
// See https://github.com/melix/japicmp-gradle-plugin
|
||||
apply plugin: 'me.champeau.gradle.japicmp'
|
||||
|
||||
version = '3.16-beta3'
|
||||
ext {
|
||||
japicmpversion = '3.15'
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
options.encoding = 'UTF-8'
|
||||
}
|
||||
|
||||
sourceCompatibility = 1.6
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
jar {
|
||||
manifest {
|
||||
attributes 'Implementation-Title': 'Apache POI', 'Implementation-Version': version
|
||||
}
|
||||
}
|
||||
|
||||
test {
|
||||
// Exclude some tests that are not actually tests or do not run cleanly on purpose
|
||||
exclude '**/BaseTestBorderStyle.class'
|
||||
exclude '**/BaseTestCellUtil.class'
|
||||
exclude '**/TestUnfixedBugs.class'
|
||||
exclude '**/TestOneFile.class'
|
||||
|
||||
systemProperties = System.properties
|
||||
|
||||
// set heap size for the test JVM(s)
|
||||
minHeapSize = "128m"
|
||||
maxHeapSize = "768m"
|
||||
|
||||
// show standard out and standard error of the test JVM(s) on the console
|
||||
//testLogging.showStandardStreams = true
|
||||
|
||||
// http://forums.gradle.org/gradle/topics/jacoco_related_failure_in_multiproject_build
|
||||
systemProperties['user.dir'] = workingDir
|
||||
|
||||
systemProperties['POI.testdata.path'] = '../../test-data'
|
||||
//systemProperties['user.language'] = 'en'
|
||||
//systemProperties['user.country'] = 'US'
|
||||
}
|
||||
|
||||
test.beforeSuite { TestDescriptor suite ->
|
||||
System.setProperty('user.language', 'en')
|
||||
System.setProperty('user.country', 'US')
|
||||
}
|
||||
|
||||
jacoco {
|
||||
toolVersion = '0.7.8'
|
||||
}
|
||||
|
||||
// ensure the build-dir exists
|
||||
projectDir.mkdirs()
|
||||
|
||||
if (project.hasProperty('enableSonar')) {
|
||||
sonarqube {
|
||||
properties {
|
||||
// as we currently use build/<module>/ as project-basedir, we need to tell Sonar to use
|
||||
// the root-folder as "basedir" for the projects
|
||||
property "sonar.projectBaseDir", "$projectDir/../.."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project('main') {
|
||||
sourceSets.main.java.srcDirs = ['../../src/java']
|
||||
sourceSets.main.resources.srcDirs = ['../../src/resources/main']
|
||||
sourceSets.test.java.srcDirs = ['../../src/testcases']
|
||||
|
||||
dependencies {
|
||||
compile 'commons-codec:commons-codec:1.10'
|
||||
compile 'commons-logging:commons-logging:1.2'
|
||||
compile 'org.apache.commons:commons-collections4:4.1'
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
}
|
||||
|
||||
// Create a separate jar for test-code to depend on it in other projects
|
||||
// See http://stackoverflow.com/questions/5144325/gradle-test-dependency
|
||||
task testJar(type: Jar, dependsOn: testClasses) {
|
||||
baseName = "test-${project.archivesBaseName}"
|
||||
from sourceSets.test.output
|
||||
}
|
||||
|
||||
configurations {
|
||||
tests
|
||||
}
|
||||
|
||||
artifacts {
|
||||
tests testJar
|
||||
}
|
||||
|
||||
// TOOD: we should not duplicate this task in each project, but I did not figure out how to inject the artifactId for each project
|
||||
task japicmp(type: me.champeau.gradle.ArtifactJapicmpTask, dependsOn: jar) {
|
||||
baseline = 'org.apache.poi:poi:' + japicmpversion + '@jar'
|
||||
to = jar.archivePath
|
||||
onlyModified = true
|
||||
onlyBinaryIncompatibleModified = true
|
||||
failOnModification = false
|
||||
txtOutputFile = file("$buildDir/reports/japi.txt")
|
||||
htmlOutputFile = file("$buildDir/reports/japi.html")
|
||||
}
|
||||
}
|
||||
|
||||
project('ooxml') {
|
||||
sourceSets.main.java.srcDirs = ['../../src/ooxml/java']
|
||||
sourceSets.main.resources.srcDirs = ['../../src/ooxml/resources', '../../src/resources/ooxml']
|
||||
sourceSets.test.java.srcDirs = ['../../src/ooxml/testcases']
|
||||
|
||||
// for now import the ant-task for building the jars from build.xml
|
||||
// we need to rename the tasks as e.g. task "jar" conflicts with :ooxml:jar
|
||||
ant.importBuild('../../build.xml') { antTargetName ->
|
||||
'ant-' + antTargetName
|
||||
}
|
||||
compileJava.dependsOn 'ant-compile-ooxml-xsds'
|
||||
|
||||
dependencies {
|
||||
compile 'org.apache.xmlbeans:xmlbeans:2.6.0'
|
||||
compile 'org.apache.commons:commons-collections4:4.1'
|
||||
compile 'org.apache.santuario:xmlsec:2.0.6'
|
||||
compile 'org.bouncycastle:bcpkix-jdk15on:1.54'
|
||||
compile 'com.github.virtuald:curvesapi:1.04'
|
||||
|
||||
// for ooxml-lite, should we move this somewhere else?
|
||||
compile 'junit:junit:4.12'
|
||||
|
||||
compile project(':main')
|
||||
compile project(':scratchpad') // TODO: get rid of this dependency!
|
||||
compile files('../../ooxml-lib/ooxml-schemas-1.3.jar')
|
||||
compile files('../../ooxml-lib/ooxml-security-1.1.jar')
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
testCompile project(path: ':main', configuration: 'tests')
|
||||
}
|
||||
|
||||
// TOOD: we should not duplicate this task in each project, but I did not figure out how to inject the artifactId for each project
|
||||
task japicmp(type: me.champeau.gradle.ArtifactJapicmpTask, dependsOn: jar) {
|
||||
baseline = 'org.apache.poi:poi-ooxml:' + japicmpversion + '@jar'
|
||||
to = jar.archivePath
|
||||
onlyModified = true
|
||||
onlyBinaryIncompatibleModified = true
|
||||
failOnModification = false
|
||||
txtOutputFile = file("$buildDir/reports/japi.txt")
|
||||
htmlOutputFile = file("$buildDir/reports/japi.html")
|
||||
}
|
||||
}
|
||||
|
||||
project('examples') {
|
||||
sourceSets.main.java.srcDirs = ['../../src/examples/src']
|
||||
|
||||
dependencies {
|
||||
compile project(':main')
|
||||
compile project(':ooxml')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
project('excelant') {
|
||||
sourceSets.main.java.srcDirs = ['../../src/excelant/java']
|
||||
sourceSets.main.resources.srcDirs = ['../../src/excelant/resources']
|
||||
sourceSets.test.java.srcDirs = ['../../src/excelant/testcases']
|
||||
|
||||
dependencies {
|
||||
compile 'org.apache.ant:ant:1.9.4'
|
||||
|
||||
compile project(':main')
|
||||
compile project(':ooxml')
|
||||
|
||||
testCompile project(path: ':main', configuration: 'tests')
|
||||
}
|
||||
|
||||
// TOOD: we should not duplicate this task in each project, but I did not figure out how to inject the artifactId for each project
|
||||
task japicmp(type: me.champeau.gradle.ArtifactJapicmpTask, dependsOn: jar) {
|
||||
baseline = 'org.apache.poi:poi-excelant:' + japicmpversion + '@jar'
|
||||
to = jar.archivePath
|
||||
onlyModified = true
|
||||
onlyBinaryIncompatibleModified = true
|
||||
failOnModification = false
|
||||
txtOutputFile = file("$buildDir/reports/japi.txt")
|
||||
htmlOutputFile = file("$buildDir/reports/japi.html")
|
||||
}
|
||||
}
|
||||
|
||||
project('integrationtest') {
|
||||
sourceSets.test.java.srcDirs = ['../../src/integrationtest']
|
||||
|
||||
dependencies {
|
||||
compile 'org.apache.ant:ant:1.9.4'
|
||||
|
||||
compile project(':main')
|
||||
compile project(':ooxml')
|
||||
compile project(':scratchpad')
|
||||
compile project(':examples')
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
}
|
||||
|
||||
test {
|
||||
// exclude these from the normal test-run
|
||||
exclude '**/TestAllFiles.class'
|
||||
exclude '**/*FileHandler.class'
|
||||
exclude '**/RecordsStresser.class'
|
||||
}
|
||||
|
||||
task integrationTest(type: Test) {
|
||||
// these are just tests used during development of more test-code
|
||||
exclude '**/*FileHandler.class'
|
||||
exclude '**/RecordStresser.class'
|
||||
}
|
||||
}
|
||||
|
||||
project('scratchpad') {
|
||||
sourceSets.main.java.srcDirs = ['../../src/scratchpad/src']
|
||||
sourceSets.main.resources.srcDirs = ['../../src/resources/scratchpad']
|
||||
sourceSets.test.java.srcDirs = ['../../src/scratchpad/testcases']
|
||||
|
||||
dependencies {
|
||||
compile project(':main')
|
||||
// cyclic-dependency here: compile project(':ooxml')
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
testCompile project(path: ':main', configuration: 'tests')
|
||||
}
|
||||
|
||||
// TOOD: we should not duplicate this task in each project, but I did not figure out how to inject the artifactId for each project
|
||||
task japicmp(type: me.champeau.gradle.ArtifactJapicmpTask, dependsOn: jar) {
|
||||
baseline = 'org.apache.poi:poi-scratchpad:' + japicmpversion + '@jar'
|
||||
to = jar.archivePath
|
||||
onlyModified = true
|
||||
onlyBinaryIncompatibleModified = true
|
||||
failOnModification = false
|
||||
txtOutputFile = file("$buildDir/reports/japi.txt")
|
||||
htmlOutputFile = file("$buildDir/reports/japi.html")
|
||||
}
|
||||
}
|
142
doap_POI.rdf
142
doap_POI.rdf
@ -1,142 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/xsl"?>
|
||||
<rdf:RDF xml:lang="en"
|
||||
xmlns="http://usefulinc.com/ns/doap#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:asfext="http://projects.apache.org/ns/asfext#"
|
||||
xmlns:foaf="http://xmlns.com/foaf/0.1/">
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<Project rdf:about="https://poi.apache.org">
|
||||
<created>2006-01-26</created>
|
||||
<license rdf:resource="https://spdx.org/licenses/Apache-2.0" />
|
||||
<name>Apache POI</name>
|
||||
<homepage rdf:resource="https://poi.apache.org" />
|
||||
<asfext:pmc rdf:resource="https://poi.apache.org" />
|
||||
<shortdesc>Java API To Access Microsoft Document File Formats</shortdesc>
|
||||
<description>APIs for manipulating various file formats based upon Open Office XML (ECMA-376) and Microsoft's OLE 2 Compound Document formats using pure Java. Apache POI is your Java Excel, Word and PowerPoint solution. We have a complete API for porting other OOXML and OLE 2 Compound Document formats and welcome others to participate.</description>
|
||||
<bug-database rdf:resource="https://issues.apache.org/bugzilla/buglist.cgi?product=POI" />
|
||||
<mailing-list rdf:resource="https://poi.apache.org/mailinglists.html" />
|
||||
<download-page rdf:resource="https://www.apache.org/dyn/closer.lua/poi/" />
|
||||
<programming-language>Java</programming-language>
|
||||
<category rdf:resource="https://projects.apache.org/category/content" />
|
||||
<category rdf:resource="https://projects.apache.org/category/library" />
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.15</name>
|
||||
<created>2016-09-21</created>
|
||||
<revision>3.15</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.14</name>
|
||||
<created>2016-03-05</created>
|
||||
<revision>3.14</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.13</name>
|
||||
<created>2015-09-29</created>
|
||||
<revision>3.13</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.12</name>
|
||||
<created>2015-05-11</created>
|
||||
<revision>3.12</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.11</name>
|
||||
<created>2014-12-21</created>
|
||||
<revision>3.11</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.10.1</name>
|
||||
<created>2014-08-18</created>
|
||||
<revision>3.10.1</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.10</name>
|
||||
<created>2014-02-08</created>
|
||||
<revision>3.10</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.9</name>
|
||||
<created>2012-12-03</created>
|
||||
<revision>3.9</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.8</name>
|
||||
<created>2012-03-26</created>
|
||||
<revision>3.8</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.7</name>
|
||||
<created>2010-10-29</created>
|
||||
<revision>3.7</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.6</name>
|
||||
<created>2009-12-14</created>
|
||||
<revision>3.6</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.5</name>
|
||||
<created>2009-09-28</created>
|
||||
<revision>3.5</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Apache POI 3.2</name>
|
||||
<created>2008-10-19</created>
|
||||
<revision>3.2</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<repository>
|
||||
<SVNRepository>
|
||||
<location rdf:resource="https://svn.apache.org/repos/asf/poi/"/>
|
||||
<browse rdf:resource="https://svn.apache.org/viewvc/poi/"/>
|
||||
</SVNRepository>
|
||||
</repository>
|
||||
<maintainer>
|
||||
<foaf:Person>
|
||||
<foaf:name>POI Committers</foaf:name>
|
||||
<foaf:mbox rdf:resource="mailto:dev@poi.apache.org"/>
|
||||
</foaf:Person>
|
||||
</maintainer>
|
||||
</Project>
|
||||
</rdf:RDF>
|
@ -1,339 +0,0 @@
|
||||
// This script is used as input to the Jenkins Job DSL plugin to create all the build-jobs that
|
||||
// Apache POI uses on the public Jenkins instance at https://builds.apache.org/view/POI/
|
||||
//
|
||||
// See https://github.com/jenkinsci/job-dsl-plugin/wiki for information about the DSL, you can
|
||||
// use http://job-dsl.herokuapp.com/ to validate the code before checkin
|
||||
//
|
||||
|
||||
def triggerSundays = '''
|
||||
# only run this once per week on Sundays
|
||||
H H * * 0
|
||||
'''
|
||||
|
||||
def poijobs = [
|
||||
[ name: 'POI-DSL-1.6',
|
||||
// workaround as Sourceforge does not accept any of the SSL ciphers in JDK 6 any more and thus we cannot download this jar
|
||||
// as part of the Ant build
|
||||
addShell: 'wget -O lib/findbugs-noUpdateChecks-2.0.3.zip http://downloads.sourceforge.net/project/findbugs/findbugs/2.0.3/findbugs-noUpdateChecks-2.0.3.zip?download='
|
||||
],
|
||||
[ name: 'POI-DSL-1.8', jdk: '1.8', trigger: 'H */12 * * *'
|
||||
],
|
||||
[ name: 'POI-DSL-OpenJDK', jdk: 'OpenJDK', trigger: 'H */12 * * *',
|
||||
// H13-H20 (Ubuntu 16.04) do not have OpenJDK 6 installed, see https://issues.apache.org/jira/browse/INFRA-12880
|
||||
slaveAdd: '&&!beam1&&!beam2&&!beam3&&!beam4&&!beam5&&!beam6&&!beam7&&!beam8&&!H12&&!H13&&!H14&&!H15&&!H16&&!H17&&!H18&&!H19&&!H20&&!H21&&!H22&&!H23&&!H24&&!qnode1&&!qnode2&&!qnode3&&!ubuntu-eu2&&!ubuntu-eu3&&!ubuntu-us1',
|
||||
// the JDK is missing on some slaves so builds are unstable
|
||||
skipcigame: true
|
||||
],
|
||||
[ name: 'POI-DSL-1.9', jdk: '1.9', trigger: triggerSundays,
|
||||
properties: ['-Dmaxpermsize=-Dthis.is.a.dummy=true',
|
||||
'-Djava9addmods=--add-modules=java.xml.bind',
|
||||
'-Djavadoc9addmods=--add-modules=java.xml.bind',
|
||||
'-Djava9addmodsvalue=-Dsun.reflect.debugModuleAccessChecks=true',
|
||||
'-Djava9addopens1=--add-opens=java.xml/com.sun.org.apache.xerces.internal.util=ALL-UNNAMED',
|
||||
'-Djava9addopens2=--add-opens=java.base/java.io=ALL-UNNAMED',
|
||||
'-Djava9addopens3=--add-opens=java.base/java.nio=ALL-UNNAMED',
|
||||
'-Djava9addopens4=--add-opens=java.base/java.lang=ALL-UNNAMED',
|
||||
'-Djava9addopens5=--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED',
|
||||
'-Djava.locale.providers=JRE,CLDR'],
|
||||
skipcigame: true
|
||||
],
|
||||
[ name: 'POI-DSL-IBM-JDK', jdk: 'IBMJDK', trigger: triggerSundays,
|
||||
// some OOXML tests fail with strange XML parsing errors and missing JCE unlimited strength requirements
|
||||
disabled: true, skipcigame: true
|
||||
],
|
||||
[ name: 'POI-DSL-old-Xerces', trigger: triggerSundays,
|
||||
shell: 'mkdir -p compile-lib && test -f compile-lib/xercesImpl-2.6.1.jar || wget -O compile-lib/xercesImpl-2.6.1.jar http://repo1.maven.org/maven2/xerces/xercesImpl/2.6.1/xercesImpl-2.6.1.jar\n',
|
||||
// the property triggers using Xerces as XML Parser and previously showed some exception that can occur
|
||||
properties: ['-Dadditionaljar=compile-lib/xercesImpl-2.6.1.jar'],
|
||||
// workaround as Sourceforge does not accept any of the SSL ciphers in JDK 6 any more and thus we cannot download this jar
|
||||
// as part of the Ant build
|
||||
addShell: 'wget -O lib/findbugs-noUpdateChecks-2.0.3.zip http://downloads.sourceforge.net/project/findbugs/findbugs/2.0.3/findbugs-noUpdateChecks-2.0.3.zip?download='
|
||||
],
|
||||
[ name: 'POI-DSL-Maven', trigger: 'H */4 * * *', maven: true
|
||||
],
|
||||
[ name: 'POI-DSL-regenerate-javadoc', trigger: triggerSundays, javadoc: true
|
||||
],
|
||||
[ name: 'POI-DSL-API-Check', jdk: '1.7', trigger: '@daily', apicheck: true
|
||||
],
|
||||
[ name: 'POI-DSL-Gradle', jdk: '1.7', trigger: triggerSundays, email: 'centic@apache.org', gradle: true,
|
||||
// Gradle will not run any tests if the code is up-to-date, therefore manually mark the files as updated
|
||||
addShell: 'touch --no-create build/*/build/test-results/TEST-*.xml build/*/build/test-results/test/TEST-*.xml'
|
||||
],
|
||||
[ name: 'POI-DSL-no-scratchpad', trigger: triggerSundays, noScratchpad: true
|
||||
],
|
||||
[ name: 'POI-DSL-SonarQube', jdk: '1.8', trigger: 'H 9 * * *', maven: true, sonar: true
|
||||
],
|
||||
[ name: 'POI-DSL-SonarQube-Gradle', jdk: '1.8', trigger: 'H 9 * * *', gradle: true, sonar: true, skipcigame: true
|
||||
],
|
||||
]
|
||||
|
||||
def svnBase = 'https://svn.apache.org/repos/asf/poi/trunk'
|
||||
def defaultJdk = '1.6'
|
||||
def defaultTrigger = 'H/15 * * * *' // check SCM every 60/15 = 4 minutes
|
||||
def defaultEmail = 'dev@poi.apache.org'
|
||||
def defaultAnt = 'Ant 1.9.9'
|
||||
// currently a lot of H?? slaves don't have Ant installed ...
|
||||
def defaultSlaves = 'ubuntu&&!cloud-slave&&!H15&&!H17&&!H18&&!H24&&!ubuntu-4'
|
||||
|
||||
def jdkMapping = [
|
||||
'1.6': 'JDK 1.6 (latest)',
|
||||
'1.7': 'JDK 1.7 (latest)',
|
||||
'1.8': 'JDK 1.8 (latest)',
|
||||
'1.9': 'JDK 9 b156 (early access build) with project Jigsaw',
|
||||
'OpenJDK': 'OpenJDK 6 (on Ubuntu only) ', // blank is required here until the name in the Jenkins instance is fixed!
|
||||
'IBMJDK': 'IBM 1.8 64-bit (on Ubuntu only)',
|
||||
]
|
||||
|
||||
poijobs.each { poijob ->
|
||||
def jdkKey = poijob.jdk ?: defaultJdk
|
||||
def trigger = poijob.trigger ?: defaultTrigger
|
||||
def email = poijob.email ?: defaultEmail
|
||||
def slaves = defaultSlaves + (poijob.slaveAdd ?: '')
|
||||
|
||||
job(poijob.name) {
|
||||
if (poijob.disabled) {
|
||||
disabled()
|
||||
}
|
||||
|
||||
def defaultDesc = '''
|
||||
<img src="https://poi.apache.org/resources/images/project-logo.jpg" />
|
||||
<p>
|
||||
Apache POI - the Java API for Microsoft Documents
|
||||
</p>
|
||||
<p>
|
||||
<b>This is an automatically generated Job Config, do not edit it here!
|
||||
Instead change the Jenkins Job DSL at <a href="https://svn.apache.org/repos/asf/poi/trunk/jenkins">https://svn.apache.org/repos/asf/poi/trunk/jenkins</a>,
|
||||
see <a href="https://github.com/jenkinsci/job-dsl-plugin/wiki">https://github.com/jenkinsci/job-dsl-plugin/wiki</a>
|
||||
for more details about the DSL.</b>
|
||||
</p>'''
|
||||
|
||||
description( defaultDesc +
|
||||
(poijob.apicheck ?
|
||||
'''
|
||||
<p>
|
||||
<b><a href="https://builds.apache.org/analysis/dashboard?id=org.apache.poi%3Apoi-parent&did=1" target="_blank">Sonar reports</a></b> -
|
||||
<p>
|
||||
<b><a href="lastSuccessfulBuild/artifact/build/main/build/reports/japi.html">API Check POI</a></b>
|
||||
<b><a href="lastSuccessfulBuild/artifact/build/ooxml/build/reports/japi.html">API Check POI-OOXML</a></b>
|
||||
<b><a href="lastSuccessfulBuild/artifact/build/excelant/build/reports/japi.html">API Check POI-Excelant</a></b>
|
||||
<b><a href="lastSuccessfulBuild/artifact/build/scratchpad/build/reports/japi.html">API Check POI-Scratchpad</a></b>
|
||||
|
||||
</p>
|
||||
''' :
|
||||
'''
|
||||
<p>
|
||||
<b><a href="lastSuccessfulBuild/findbugsResult/" target="_blank">Findbugs report of latest build</a></b> -
|
||||
<b><a href="https://builds.apache.org/analysis/dashboard?id=org.apache.poi%3Apoi-parent&did=1" target="_blank">Sonar reports</a></b> -
|
||||
<b><a href="lastSuccessfulBuild/artifact/build/coverage/index.html" target="_blank">Coverage of latest build</a></b>
|
||||
</p>
|
||||
'''))
|
||||
logRotator {
|
||||
numToKeep(5)
|
||||
artifactNumToKeep(1)
|
||||
}
|
||||
label(slaves)
|
||||
environmentVariables {
|
||||
env('LANG', 'en_US.UTF-8')
|
||||
if(jdkKey == '1.9') {
|
||||
// when using JDK 9 for running Ant, we need to provide more packages for the forbidden-api-checks task
|
||||
env('ANT_OPTS', '--add-modules=java.xml.bind')
|
||||
}
|
||||
}
|
||||
wrappers {
|
||||
timeout {
|
||||
absolute(180)
|
||||
abortBuild()
|
||||
writeDescription('Build was aborted due to timeout')
|
||||
}
|
||||
if(poijob.sonar) {
|
||||
configure { project ->
|
||||
project / buildWrappers << 'hudson.plugins.sonar.SonarBuildWrapper' {}
|
||||
}
|
||||
}
|
||||
}
|
||||
jdk(jdkMapping.get(jdkKey))
|
||||
scm {
|
||||
svn(svnBase) { svnNode ->
|
||||
svnNode / browser(class: 'hudson.scm.browsers.ViewSVN') /
|
||||
url << 'http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN'
|
||||
}
|
||||
}
|
||||
triggers {
|
||||
scm(trigger)
|
||||
}
|
||||
|
||||
def shellcmds = '# show which files are currently modified in the working copy\n' +
|
||||
'svn status\n' +
|
||||
'\n' +
|
||||
'echo Java-Home: $JAVA_HOME\n' +
|
||||
'ls -al $JAVA_HOME/\n' +
|
||||
'\n' +
|
||||
(poijob.shell ?: '') + '\n' +
|
||||
'# ignore any error message\n' +
|
||||
'exit 0\n'
|
||||
|
||||
// Create steps and publishers depending on the type of Job that is selected
|
||||
if(poijob.maven) {
|
||||
steps {
|
||||
shell(shellcmds)
|
||||
maven {
|
||||
goals('clean')
|
||||
rootPOM('sonar/pom.xml')
|
||||
localRepository(LocalRepositoryLocation.LOCAL_TO_WORKSPACE)
|
||||
mavenInstallation('maven-3.2.1')
|
||||
}
|
||||
/* Currently not done, let's see if it is still necessary:
|
||||
# Maven-Download fails for strange reasons, try to workaround...
|
||||
mkdir -p sonar/ooxml-schema-security/target/schemas && wget -O sonar/ooxml-schema-security/target/schemas/xmldsig-core-schema.xsd http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd
|
||||
*/
|
||||
maven {
|
||||
if(poijob.sonar) {
|
||||
goals('compile $SONAR_MAVEN_GOAL -Dsonar.host.url=$SONAR_HOST_URL')
|
||||
} else {
|
||||
goals('package')
|
||||
}
|
||||
rootPOM('sonar/pom.xml')
|
||||
mavenOpts('-Xmx2g')
|
||||
mavenOpts('-Xms256m')
|
||||
mavenOpts('-XX:MaxPermSize=512m')
|
||||
mavenOpts('-XX:-OmitStackTraceInFastThrow')
|
||||
localRepository(LocalRepositoryLocation.LOCAL_TO_WORKSPACE)
|
||||
mavenInstallation('maven-3.2.1')
|
||||
}
|
||||
}
|
||||
publishers {
|
||||
if (!poijob.skipcigame) {
|
||||
configure { project ->
|
||||
project / publishers << 'hudson.plugins.cigame.GamePublisher' {}
|
||||
}
|
||||
}
|
||||
mailer(email, false, false)
|
||||
}
|
||||
} else if (poijob.javadoc) {
|
||||
steps {
|
||||
shell(shellcmds)
|
||||
ant {
|
||||
targets(['clean', 'javadocs'] + (poijob.properties ?: []))
|
||||
prop('coverage.enabled', true)
|
||||
// Properties did not work, so I had to use targets instead
|
||||
//properties(poijob.properties ?: '')
|
||||
antInstallation(defaultAnt)
|
||||
}
|
||||
shell('zip -r build/javadocs.zip build/tmp/site/build/site/apidocs')
|
||||
}
|
||||
publishers {
|
||||
if (!poijob.skipcigame) {
|
||||
configure { project ->
|
||||
project / publishers << 'hudson.plugins.cigame.GamePublisher' {}
|
||||
}
|
||||
}
|
||||
mailer(email, false, false)
|
||||
}
|
||||
} else if (poijob.apicheck) {
|
||||
steps {
|
||||
shell(shellcmds)
|
||||
gradle {
|
||||
tasks('japicmp')
|
||||
useWrapper(false)
|
||||
}
|
||||
}
|
||||
publishers {
|
||||
archiveArtifacts('build/*/build/reports/japi.html')
|
||||
if (!poijob.skipcigame) {
|
||||
configure { project ->
|
||||
project / publishers << 'hudson.plugins.cigame.GamePublisher' {}
|
||||
}
|
||||
}
|
||||
mailer(email, false, false)
|
||||
}
|
||||
} else if(poijob.sonar) {
|
||||
steps {
|
||||
shell(shellcmds)
|
||||
gradle {
|
||||
switches('-PenableSonar')
|
||||
switches('-Dsonar.host.url=$SONAR_HOST_URL')
|
||||
tasks('sonarqube')
|
||||
useWrapper(false)
|
||||
}
|
||||
}
|
||||
publishers {
|
||||
if (!poijob.skipcigame) {
|
||||
configure { project ->
|
||||
project / publishers << 'hudson.plugins.cigame.GamePublisher' {}
|
||||
}
|
||||
}
|
||||
mailer(email, false, false)
|
||||
}
|
||||
} else {
|
||||
steps {
|
||||
shell(shellcmds)
|
||||
if(poijob.addShell) {
|
||||
shell(poijob.addShell)
|
||||
}
|
||||
// For Jobs that should still have the default set of publishers we can configure different steps here
|
||||
if(poijob.gradle) {
|
||||
gradle {
|
||||
tasks('check')
|
||||
useWrapper(false)
|
||||
}
|
||||
} else if (poijob.noScratchpad) {
|
||||
ant {
|
||||
targets(['clean', 'compile-all'] + (poijob.properties ?: []))
|
||||
prop('coverage.enabled', true)
|
||||
antInstallation(defaultAnt)
|
||||
}
|
||||
ant {
|
||||
targets(['-Dscratchpad.ignore=true', 'jacocotask', 'test-all', 'testcoveragereport'] + (poijob.properties ?: []))
|
||||
prop('coverage.enabled', true)
|
||||
antInstallation(defaultAnt)
|
||||
}
|
||||
} else {
|
||||
ant {
|
||||
targets(['clean', 'jenkins'] + (poijob.properties ?: []))
|
||||
prop('coverage.enabled', true)
|
||||
// Properties did not work, so I had to use targets instead
|
||||
//properties(poijob.properties ?: '')
|
||||
antInstallation(defaultAnt)
|
||||
}
|
||||
ant {
|
||||
targets(['run'] + (poijob.properties ?: []))
|
||||
buildFile('src/integrationtest/build.xml')
|
||||
// Properties did not work, so I had to use targets instead
|
||||
//properties(poijob.properties ?: '')
|
||||
antInstallation(defaultAnt)
|
||||
}
|
||||
}
|
||||
}
|
||||
publishers {
|
||||
findbugs('build/findbugs.xml', false) {
|
||||
healthLimits(3, 20)
|
||||
thresholdLimit('low')
|
||||
defaultEncoding('UTF-8')
|
||||
}
|
||||
// in archive, junit and jacoco publishers, matches beneath build/*/build/... are for Gradle-build results
|
||||
archiveArtifacts('build/dist/*.tar.gz,build/findbugs.html,build/coverage/**,build/integration-test-results/**,ooxml-lib/**,build/*/build/libs/*.jar')
|
||||
warnings(['Java Compiler (javac)', 'JavaDoc Tool'], null) {
|
||||
resolveRelativePaths()
|
||||
}
|
||||
archiveJunit('build/ooxml-test-results/*.xml,build/scratchpad-test-results/*.xml,build/test-results/*.xml,build/excelant-test-results/*.xml,build/integration-test-results/*.xml,build/*/build/test-results/test/TEST-*.xml,build/*/build/test-results/TEST-*.xml') {
|
||||
testDataPublishers {
|
||||
publishTestStabilityData()
|
||||
}
|
||||
}
|
||||
jacocoCodeCoverage {
|
||||
classPattern('build/classes,build/excelant-classes,build/ooxml-classes,build/scratchpad-classes,build/*/build/classes')
|
||||
execPattern('build/*.exec,build/*/build/jacoco/*.exec')
|
||||
sourcePattern('src/java,src/excelant/java,src/ooxml/java,src/scratchpad/src')
|
||||
exclusionPattern('com/microsoft/**,org/openxmlformats/**,org/etsi/**,org/w3/**,schemaorg*/**,schemasMicrosoft*/**,org/apache/poi/hdf/model/hdftypes/definitions/*.class,org/apache/poi/hwpf/model/types/*.class,org/apache/poi/hssf/usermodel/DummyGraphics2d.class,org/apache/poi/sl/draw/binding/*.class')
|
||||
}
|
||||
|
||||
if (!poijob.skipcigame) {
|
||||
configure { project ->
|
||||
project / publishers << 'hudson.plugins.cigame.GamePublisher' {}
|
||||
}
|
||||
}
|
||||
mailer(email, false, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# create md5 checksums and gpg signatures
|
||||
|
||||
echo "If you use gpg2 you need to set GPG_BIN accordingly"
|
||||
|
||||
GPG_BIN=gpg
|
||||
|
||||
stty -echo
|
||||
echo "enter your GPG passphrase"
|
||||
read passphrase
|
||||
stty echo
|
||||
|
||||
# Do we have md5sum and sha1sum?
|
||||
# (We can use openssl if not, but the files it produces aren't as nice)
|
||||
which md5sum > /dev/null
|
||||
LACKING_MD5SUM=$?
|
||||
which sha1sum > /dev/null
|
||||
LACKING_SHA1SUM=$?
|
||||
|
||||
for i in *; do
|
||||
echo ""
|
||||
echo Signing $i
|
||||
echo $passphrase | $GPG_BIN --passphrase-fd 0 --output $i.asc --detach-sig --armor $i
|
||||
$GPG_BIN --verify $i.asc $i
|
||||
echo Hashing $i
|
||||
|
||||
if [ "$LACKING_MD5SUM" = "1" ]; then
|
||||
openssl md5 < $i > $i.md5
|
||||
else
|
||||
md5sum $i > $i.md5
|
||||
fi
|
||||
|
||||
if [ "$LACKING_SHA1SUM" = "1" ]; then
|
||||
openssl sha1 < $i > $i.sha1
|
||||
else
|
||||
sha1sum $i > $i.sha1
|
||||
fi
|
||||
done
|
@ -1,62 +0,0 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# Shell script to deploy POI artifacts in a maven repository.
|
||||
#
|
||||
# Note, You should configure your settings.xml and add a server with id=apache-releases:
|
||||
#
|
||||
# <server>
|
||||
# <id>apache-releases</id>
|
||||
# <username>apacheId</username>
|
||||
# <password>mySecurePassw0rd</password>
|
||||
# </server>
|
||||
#
|
||||
# <profiles>
|
||||
# <profile>
|
||||
# <id>apache-releases</id>
|
||||
# <properties>
|
||||
# <gpg.passphrase><!-- Your GPG passphrase --></gpg.passphrase>
|
||||
# </properties>
|
||||
# </profile>
|
||||
# </profiles>
|
||||
#
|
||||
# Usage:
|
||||
# 1. ant dist
|
||||
# 2. cd build/dist
|
||||
# 3. ./mvn-deploy.sh
|
||||
|
||||
M2_REPOSITORY=https://repository.apache.org/service/local/staging/deploy/maven2
|
||||
|
||||
VERSION=@VERSION@
|
||||
DSTAMP=@DSTAMP@
|
||||
|
||||
for artifactId in poi poi-scratchpad poi-ooxml poi-examples poi-ooxml-schemas poi-excelant
|
||||
do
|
||||
SENDS="-Dfile=$artifactId-$VERSION-$DSTAMP.jar"
|
||||
SENDS="$SENDS -DpomFile=$artifactId-$VERSION.pom"
|
||||
if [ -r $artifactId-$VERSION-sources-$DSTAMP.jar ]; then
|
||||
SENDS="$SENDS -Dsources=$artifactId-$VERSION-sources-$DSTAMP.jar"
|
||||
fi
|
||||
if [ -r $artifactId-$VERSION-javadocs-$DSTAMP.jar ]; then
|
||||
SENDS="$SENDS -Djavadoc=$artifactId-$VERSION-javadocs-$DSTAMP.jar"
|
||||
fi
|
||||
|
||||
mvn gpg:sign-and-deploy-file \
|
||||
-DrepositoryId=apache-releases -P apache-releases \
|
||||
-Durl=$M2_REPOSITORY \
|
||||
$SENDS
|
||||
done
|
@ -1,70 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>ooxml-schemas</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>OOXML schemas</name>
|
||||
<description>XmlBeans generated from the Ecma supplied xsds:
|
||||
http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%20Part%204%20(DOCX).zip</description>
|
||||
<url>http://poi.apache.org/</url>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
<distribution>repo</distribution>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>2.3.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,79 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>ooxml-security</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>OOXML security</name>
|
||||
<description>
|
||||
XmlBeans generated from various supplied xsds for encryption and signing:
|
||||
http://msdn.microsoft.com/en-us/library/dd925810(v=office.12).aspx
|
||||
http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip
|
||||
http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd
|
||||
http://uri.etsi.org/01903/v1.3.2/XAdES.xsd
|
||||
http://uri.etsi.org/01903/v1.4.1/XAdESv141.xsd
|
||||
http://dublincore.org/schemas/xmls/qdc/2003/04/02/dc.xsd
|
||||
http://dublincore.org/schemas/xmls/qdc/2003/04/02/dcterms.xsd
|
||||
http://dublincore.org/schemas/xmls/qdc/2003/04/02/dcmitype.xsd
|
||||
</description>
|
||||
<url>http://poi.apache.org/</url>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
<distribution>repo</distribution>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>2.3.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,78 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-examples</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Apache POI</name>
|
||||
<url>http://poi.apache.org/</url>
|
||||
<description>Apache POI Examples</description>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-scratchpad</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,78 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-excelant</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Apache POI</name>
|
||||
<url>http://poi.apache.org/</url>
|
||||
<description>Apache POI Excel Ant Tasks</description>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ant</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
<version>1.8.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,68 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml-schemas</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Apache POI</name>
|
||||
<url>http://poi.apache.org/</url>
|
||||
<description>Apache POI - Java API To Access Microsoft Format Files</description>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>2.6.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,78 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Apache POI</name>
|
||||
<url>http://poi.apache.org/</url>
|
||||
<description>Apache POI - Java API To Access Microsoft Format Files</description>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml-schemas</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.virtuald</groupId>
|
||||
<artifactId>curvesapi</artifactId>
|
||||
<version>1.04</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,68 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-scratchpad</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Apache POI</name>
|
||||
<url>http://poi.apache.org/</url>
|
||||
<description>Apache POI - Java API To Access Microsoft Format Files</description>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
101
maven/poi.pom
101
maven/poi.pom
@ -1,101 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>@VERSION@</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>Apache POI</name>
|
||||
<url>http://poi.apache.org/</url>
|
||||
<description>Apache POI - Java API To Access Microsoft Format Files</description>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
<version>1.2</version>
|
||||
<scope>runtime</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<version>1.2.17</version>
|
||||
<scope>runtime</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>1.10</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-core</artifactId>
|
||||
<scope>test</scope>
|
||||
<version>1.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
<version>4.12</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-collections4</artifactId>
|
||||
<version>4.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -1,67 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
<!-- POI OSGi Bundle System -->
|
||||
<project name="POI OSGi Bundle" default="bundle" basedir=".." xmlns:mvn="antlib:org.apache.maven.artifact.ant">
|
||||
<description>The Apache POI OSGi Bundle System.</description>
|
||||
|
||||
<property name="bundle.lib" location="osgi/lib"/>
|
||||
|
||||
<!-- TODO Import these from the parent build file -->
|
||||
<property name="repository.m2" value="http://repo1.maven.org"/>
|
||||
<property name="version.id" value="3.11-beta1"/>
|
||||
<property name="dist.dir" value="build/dist"/>
|
||||
|
||||
<!-- jars in the /lib directory, see the fetch-bundle-jars target-->
|
||||
<property name="bundle.bnd.jar" location="${bundle.lib}/bnd-1.50.0.jar"/>
|
||||
<property name="bundle.bnd.url" value="${repository.m2}/maven2/biz/aQute/bnd/1.50.0/bnd-1.50.0.jar"/>
|
||||
<import file="../build.xml"/>
|
||||
|
||||
<target name="check-bundle-jars">
|
||||
<condition property="jars.bundle.present">
|
||||
<available file="${bundle.bnd.jar}"/>
|
||||
</condition>
|
||||
</target>
|
||||
|
||||
<target name="fetch-bundle-jars" unless="jars.bundle.present">
|
||||
<mkdir dir="${bundle.lib}"/>
|
||||
<antcall target="downloadfile">
|
||||
<param name="sourcefile" value="${bundle.bnd.url}"/>
|
||||
<param name="destfile" value="${bundle.bnd.jar}"/>
|
||||
</antcall>
|
||||
</target>
|
||||
|
||||
<!--
|
||||
<target name="bundle" depends="init, check-bundle-jars, fetch-bundle-jars, jar">
|
||||
-->
|
||||
<target name="bundle" depends="init, check-bundle-jars, fetch-bundle-jars">
|
||||
<taskdef resource="aQute/bnd/ant/taskdef.properties" classpath="${bundle.bnd.jar}"/>
|
||||
<mkdir dir="build/osgi"/>
|
||||
<bnd
|
||||
classpath="${dist.dir}/poi-${version.id}-${DSTAMP}.jar,${dist.dir}/poi-scratchpad-${version.id}-${DSTAMP}.jar,${dist.dir}/poi-ooxml-${version.id}-${DSTAMP}.jar"
|
||||
eclipse="false"
|
||||
failok="false"
|
||||
exceptions="true"
|
||||
output="build/osgi"
|
||||
files="test.bnd"/>
|
||||
<!-- TODO Include the settings from http://svn.apache.org/repos/asf/servicemix/smx4/bundles/trunk/poi-3.9/pom.xml -->
|
||||
<!-- TODO Make this actually spit out an OSGi Jar -->
|
||||
</target>
|
||||
</project>
|
@ -1,38 +0,0 @@
|
||||
\u001B[1mSYNOPSIS\u001B[0m
|
||||
${project.description}
|
||||
|
||||
Original Maven URLs:
|
||||
\u001B[33mmvn:${pkgGroupId}/poi/${pkgVersion}\u001B[0m
|
||||
\u001B[33mmvn:${pkgGroupId}/poi-ooxml/${pkgVersion}\u001B[0m
|
||||
\u001B[33mmvn:${pkgGroupId}/poi-scratchpad/${pkgVersion}\u001B[0m
|
||||
|
||||
\u001B[1mDESCRIPTION\u001B[0m
|
||||
The Apache POI Project's mission is to create and maintain Java APIs for manipulating various file formats based
|
||||
upon the Office Open XML standards (OOXML) and Microsoft's OLE 2 Compound Document format (OLE2). In short, you can
|
||||
read and write MS Excel files using Java. In addition, you can read and write MS Word and MS PowerPoint files using
|
||||
Java. Apache POI is your Java Excel solution (for Excel 97-2008). We have a complete API for porting other OOXML and
|
||||
OLE2 formats and welcome others to participate.
|
||||
|
||||
OLE2 files include most Microsoft Office files such as XLS, DOC, and PPT as well as MFC serialization API based file
|
||||
formats. The project provides APIs for the OLE2 Filesystem (POIFS) and OLE2 Document Properties (HPSF).
|
||||
|
||||
Office OpenXML Format is the new standards based XML file format found in Microsoft Office 2007 and 2008. This
|
||||
includes XLSX, DOCX and PPTX. The project provides a low level API to support the Open Packaging Conventions using
|
||||
openxml4j.
|
||||
|
||||
For each MS Office application there exists a component module that attempts to provide a common high level Java api
|
||||
to both OLE2 and OOXML document formats. This is most developed for Excel workbooks (SS=HSSF+XSSF). Work is
|
||||
progressing for Word documents (HWPF+XWPF) and PowerPoint presentations (HSLF+XSLF).
|
||||
|
||||
The project has recently added support for Outlook (HSMF). Microsoft opened the specifications to this format in
|
||||
October 2007. We would welcome contributions.
|
||||
|
||||
There are also projects for Visio (HDGF), TNEF (HMEF), and Publisher (HPBF).
|
||||
|
||||
As a general policy we collaborate as much as possible with other projects to provide this functionality.
|
||||
Examples include: Cocoon for which there are serializers for HSSF; Open Office.org with whom we collaborate in
|
||||
documenting the XLS format; and Tika / Lucene, for which we provide format interpretors.
|
||||
When practical, we donate components directly to those projects for POI-enabling them.
|
||||
|
||||
\u001B[1mSEE ALSO\u001B[0m
|
||||
\u001B[36mhttp://poi.apache.org/\u001B[0m
|
229
osgi/pom.xml
229
osgi/pom.xml
@ -1,229 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.apache</groupId>
|
||||
<artifactId>apache</artifactId>
|
||||
<version>10</version>
|
||||
<relativePath />
|
||||
</parent>
|
||||
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-bundle</artifactId>
|
||||
<packaging>bundle</packaging>
|
||||
<name>Apache POI OSGi bundle</name>
|
||||
<description>
|
||||
OSGi bundle that contains Apache POI, and the dependencies.
|
||||
</description>
|
||||
<url>http://poi.apache.org/</url>
|
||||
<version>${poi.version}</version>
|
||||
<!--
|
||||
<version>3.12-beta2</version>
|
||||
<version>@VERSION@</version>
|
||||
-->
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.6</maven.compiler.source>
|
||||
<maven.compiler.target>1.6</maven.compiler.target>
|
||||
<pax.exam.version>4.4.0</pax.exam.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>${poi.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-scratchpad</artifactId>
|
||||
<version>${poi.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>${poi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Test dependencies -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.12</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ops4j.pax.exam</groupId>
|
||||
<artifactId>pax-exam-junit4</artifactId>
|
||||
<version>${pax.exam.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ops4j.pax.exam</groupId>
|
||||
<artifactId>pax-exam-container-native</artifactId>
|
||||
<version>${pax.exam.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>org.apache.felix.framework</artifactId>
|
||||
<version>4.6.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ops4j.pax.exam</groupId>
|
||||
<artifactId>pax-exam-link-assembly</artifactId>
|
||||
<version>${pax.exam.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ops4j.pax.url</groupId>
|
||||
<artifactId>pax-url-aether</artifactId>
|
||||
<version>2.3.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.inject</groupId>
|
||||
<artifactId>javax.inject</artifactId>
|
||||
<version>1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.osgi</groupId>
|
||||
<artifactId>org.osgi.core</artifactId>
|
||||
<version>5.0.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-Activator>
|
||||
org.apache.poi.osgi.Activator
|
||||
</Bundle-Activator>
|
||||
<Embed-Dependency>
|
||||
poi;inline=true,
|
||||
poi-scratchpad;inline=true,
|
||||
poi-ooxml;inline=true,
|
||||
poi-ooxml-schemas,
|
||||
xmlbeans
|
||||
</Embed-Dependency>
|
||||
<Embed-Transitive>true</Embed-Transitive>
|
||||
<Bundle-DocURL>${project.url}</Bundle-DocURL>
|
||||
<Export-Package>
|
||||
org.apache.poi.*
|
||||
</Export-Package>
|
||||
<Import-Package>
|
||||
!org.junit,
|
||||
*,
|
||||
org.apache.xmlbeans.impl.xpath.saxon;resolution:=optional,
|
||||
org.apache.xmlbeans.impl.xquery.saxon;resolution:=optional,
|
||||
org.bouncycastle.cert;resolution:=optional,
|
||||
org.bouncycastle.cert.ocsp;resolution:=optional,
|
||||
org.bouncycastle.cms.bc;resolution:=optional,
|
||||
org.bouncycastle.cert.jcajce;resolution:=optional,
|
||||
org.bouncycastle.operator;resolution:=optional,
|
||||
org.bouncycastle.operator.bc;resolution:=optional,
|
||||
org.bouncycastle.tsp;resolution:=optional,
|
||||
org.openxmlformats.schemas.officeDocument.x2006.math;resolution:=optional,
|
||||
org.openxmlformats.schemas.schemaLibrary.x2006.main;resolution:=optional,
|
||||
schemasMicrosoftComOfficePowerpoint;resolution:=optional,
|
||||
schemasMicrosoftComOfficeWord;resolution:=optional,
|
||||
</Import-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.2</version>
|
||||
<configuration>
|
||||
<source>${maven.compiler.source}</source>
|
||||
<target>${maven.compiler.target}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>java6</id>
|
||||
<activation>
|
||||
<jdk>[1.6,)</jdk>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>pre-integration-test</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<descriptor>test-bundles.xml</descriptor>
|
||||
<finalName>test</finalName>
|
||||
<attach>false</attach>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-failsafe-plugin</artifactId>
|
||||
<version>2.10</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>integration-test</goal>
|
||||
<goal>verify</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<systemPropertyVariables>
|
||||
<org.ops4j.pax.logging.DefaultServiceLog.level>
|
||||
WARN
|
||||
</org.ops4j.pax.logging.DefaultServiceLog.level>
|
||||
</systemPropertyVariables>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
<organization>
|
||||
<name>The Apache Software Founation</name>
|
||||
<url>http://www.apache.org</url>
|
||||
</organization>
|
||||
<scm>
|
||||
<url>http://svn.apache.org/viewvc/poi/trunk/osgi</url>
|
||||
<connection>scm:svn:http://svn.apache.org/repos/asf/poi/trunk/osgi</connection>
|
||||
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/poi/trunk/osgi</developerConnection>
|
||||
</scm>
|
||||
</project>
|
@ -1,28 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.osgi;
|
||||
|
||||
import org.osgi.framework.BundleActivator;
|
||||
import org.osgi.framework.BundleContext;
|
||||
|
||||
public class Activator implements BundleActivator {
|
||||
public void start(BundleContext context) throws Exception {
|
||||
}
|
||||
public void stop(BundleContext context) throws Exception {
|
||||
}
|
||||
}
|
@ -1,84 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.osgi;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.ops4j.pax.exam.CoreOptions.bundle;
|
||||
import static org.ops4j.pax.exam.CoreOptions.junitBundles;
|
||||
import static org.ops4j.pax.exam.CoreOptions.options;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.ops4j.pax.exam.Configuration;
|
||||
import org.ops4j.pax.exam.Option;
|
||||
import org.ops4j.pax.exam.junit.PaxExam;
|
||||
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
|
||||
import org.ops4j.pax.exam.spi.reactors.PerMethod;
|
||||
import org.osgi.framework.Bundle;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.ServiceReference;
|
||||
|
||||
/**
|
||||
* Test to ensure that all our main formats can create, write
|
||||
* and read back in, when running under OSGi
|
||||
*/
|
||||
@RunWith(PaxExam.class)
|
||||
@ExamReactorStrategy(PerMethod.class)
|
||||
public class TestOSGiBundle {
|
||||
|
||||
private final File TARGET = new File("target");
|
||||
|
||||
@Inject
|
||||
private BundleContext bc;
|
||||
|
||||
@Configuration
|
||||
public Option[] configuration() throws IOException, URISyntaxException {
|
||||
File base = new File(TARGET, "test-bundles");
|
||||
return options(
|
||||
junitBundles(),
|
||||
bundle(new File(base, "poi-bundle.jar").toURI().toURL().toString()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHSSF() throws Exception {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet s = wb.createSheet("OSGi");
|
||||
s.createRow(0).createCell(0).setCellValue("With OSGi");
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
wb.write(baos);
|
||||
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
|
||||
|
||||
wb = new HSSFWorkbook(bais);
|
||||
assertEquals(1, wb.getNumberOfSheets());
|
||||
|
||||
s = wb.getSheet("OSGi");
|
||||
assertEquals("With OSGi", s.getRow(0).getCell(0).toString());
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
|
||||
<id>bundles</id>
|
||||
<formats>
|
||||
<format>dir</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<dependencySets>
|
||||
<dependencySet>
|
||||
<outputDirectory/>
|
||||
<outputFileNameMapping>${artifact.artifactId}.jar</outputFileNameMapping>
|
||||
<includes>
|
||||
<include>org.apache.poi:poi-bundle</include>
|
||||
</includes>
|
||||
</dependencySet>
|
||||
</dependencySets>
|
||||
</assembly>
|
128
patch.xml
128
patch.xml
@ -1,128 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!--
|
||||
=======================================================================
|
||||
Use Apache Ant to generate a patch file.
|
||||
=======================================================================
|
||||
-->
|
||||
<project name="create-patch" default="patchpackage" basedir=".">
|
||||
<property environment="env"/>
|
||||
<property name="patch.package" value="patch.tar.gz"/>
|
||||
<property name="patch.file" value="patch.txt"/>
|
||||
|
||||
<condition property="svn.found">
|
||||
<or>
|
||||
<available file="svn" filepath="${env.PATH}"/>
|
||||
<available file="svn.exe" filepath="${env.PATH}"/>
|
||||
<available file="svn.exe" filepath="${env.Path}"/>
|
||||
</or>
|
||||
</condition>
|
||||
|
||||
<target name="createpatch">
|
||||
<fail unless="svn.found" message="You need a version of svn to create the patch"/>
|
||||
<exec executable="svn" output="${patch.file}">
|
||||
<arg value="diff"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="newfiles">
|
||||
<exec executable="svn" output="${patch.file}.tmp">
|
||||
<arg value="status"/>
|
||||
</exec>
|
||||
|
||||
<!-- prepare the list of files to include in patch.tar.gz -->
|
||||
<loadfile srcfile="${patch.file}.tmp" property="tar.file.list">
|
||||
<filterchain>
|
||||
<!-- capture any new files -->
|
||||
<linecontainsregexp>
|
||||
<regexp pattern="^(\?|A)......"/>
|
||||
</linecontainsregexp>
|
||||
<!-- filter out the first six characters -->
|
||||
<tokenfilter>
|
||||
<replaceregex pattern="^(.......)" replace=""/>
|
||||
</tokenfilter>
|
||||
<!--remove line breaks -->
|
||||
<striplinebreaks/>
|
||||
</filterchain>
|
||||
</loadfile>
|
||||
</target>
|
||||
|
||||
<target name="patchpackage" depends="createpatch,newfiles">
|
||||
<delete file="${patch.package}"/>
|
||||
<tar includes="${tar.file.list}"
|
||||
destfile="${patch.package}"
|
||||
basedir="."
|
||||
compression="gzip" >
|
||||
</tar>
|
||||
<delete file="${patch.file}.tmp"/>
|
||||
</target>
|
||||
|
||||
<target name="apply"
|
||||
description="apply patch.tar.gz files generated by patchpackage">
|
||||
|
||||
<!--
|
||||
extract patch.tar.gz to svn working copy
|
||||
$ tar xvzf patch.tar.gz
|
||||
-->
|
||||
<echo message="extracting ${patch.file} to working copy"/>
|
||||
<untar src="${patch.package}"
|
||||
dest="."
|
||||
failOnEmptyArchive="true"
|
||||
compression="gzip">
|
||||
</untar>
|
||||
|
||||
<!--
|
||||
Apply the changes from patch.txt
|
||||
$ svn patch patch.txt
|
||||
-->
|
||||
<echo message="svn patch ${patch.file}"/>
|
||||
<fail unless="svn.found" message="You need a version of svn to create the patch"/>
|
||||
<exec executable="svn">
|
||||
<arg value="patch"/>
|
||||
<arg value="${patch.file}"/>
|
||||
</exec>
|
||||
<delete file="${patch.file}"/>
|
||||
|
||||
<!--
|
||||
get a list of all new files in patch.tar.gz and store in tar.file.list filelist
|
||||
$ tar tf patch.tar.gz | grep -v patch\.txt | xargs svn add
|
||||
-->
|
||||
<echo message="Getting ${patch.file} file list"/>
|
||||
<delete dir="${patch.package}.tmp" quiet="false" failonerror="false" />
|
||||
<untar src="${patch.package}"
|
||||
dest="${patch.package}.tmp"
|
||||
failOnEmptyArchive="true"
|
||||
compression="gzip">
|
||||
</untar>
|
||||
<fileset dir="${patch.package}.tmp"
|
||||
id="tar.file.list"
|
||||
excludes="${patch.file}"/>
|
||||
|
||||
<!-- add new files -->
|
||||
<echo message="Adding new files to svn working copy"/>
|
||||
<apply executable="svn"
|
||||
relative="true">
|
||||
<arg value="add"/>
|
||||
<fileset refid="tar.file.list"/>
|
||||
</apply>
|
||||
|
||||
<delete dir="${patch.package}.tmp"/>
|
||||
|
||||
</target>
|
||||
|
||||
</project>
|
@ -1,10 +0,0 @@
|
||||
rootProject.name = 'poi'
|
||||
|
||||
include 'main', 'ooxml', 'excelant', 'examples', 'scratchpad', 'integrationtest'
|
||||
|
||||
project(':main').projectDir = new File(settingsDir, 'build/main')
|
||||
project(':ooxml').projectDir = new File(settingsDir, 'build/ooxml')
|
||||
project(':excelant').projectDir = new File(settingsDir, 'build/excelant')
|
||||
project(':examples').projectDir = new File(settingsDir, 'build/examples')
|
||||
project(':scratchpad').projectDir = new File(settingsDir, 'build/scratchpad')
|
||||
project(':integrationtest').projectDir = new File(settingsDir, 'build/integrationtest')
|
@ -1,76 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-examples</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Apache POI Examples package</name>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- copy sources, resources and tests in place as otherwise Sonar does not pick them up correctly! -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>${maven.plugin.resources.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-sources</id>
|
||||
<!-- here the phase you need -->
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/examples/src</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- clean copied sources afterwards -->
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>${maven.plugin.clean.version}</version>
|
||||
<configuration>
|
||||
<filesets>
|
||||
<fileset>
|
||||
<directory>src</directory>
|
||||
<followSymlinks>false</followSymlinks>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- non-test dependency for UpdateEmbeddedDoc -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,114 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-excelant</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Apache POI ExcelAnt package</name>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- copy sources, resources and tests in place as otherwise Sonar does not pick them up correctly! -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>${maven.plugin.resources.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-sources</id>
|
||||
<!-- here the phase you need -->
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/excelant/java</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-resources</id>
|
||||
<!-- here the phase you need -->
|
||||
<phase>generate-resources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/resources</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/excelant/resources</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-tests</id>
|
||||
<!-- here the phase you need -->
|
||||
<phase>generate-test-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/excelant/testcases</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- clean copied sources afterwards -->
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>${maven.plugin.clean.version}</version>
|
||||
<configuration>
|
||||
<filesets>
|
||||
<fileset>
|
||||
<directory>src</directory>
|
||||
<followSymlinks>false</followSymlinks>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.ant</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
<version>1.8.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,129 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Apache POI Main package</name>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- copy sources, resources and tests in place as otherwise Sonar does not pick them up correctly! -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>${maven.plugin.resources.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-sources</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/java</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-resources</id>
|
||||
<phase>generate-resources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/resources</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/resources/main</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-tests</id>
|
||||
<!-- here the phase you need -->
|
||||
<phase>generate-test-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/testcases</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<!-- clean copied sources afterwards -->
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>${maven.plugin.clean.version}</version>
|
||||
<configuration>
|
||||
<filesets>
|
||||
<fileset>
|
||||
<directory>src</directory>
|
||||
<followSymlinks>false</followSymlinks>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- provide the test-jar for other modules -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>${maven.plugin.jar.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>test-jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<!-- set jvm parameters for surefire plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${maven.plugin.surefire.version}</version>
|
||||
<configuration>
|
||||
<argLine>@{argLine} -Duser.language=en -Duser.country=US -Xmx1024m -XX:MaxPermSize=256m -XX:-OmitStackTraceInFastThrow</argLine>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-collections4</artifactId>
|
||||
<version>4.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>1.10</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,55 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
<artifactId>poi-ooxml-schema-encryption</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Apache POI - Openxmlformats Encryption Schema package</name>
|
||||
|
||||
<properties>
|
||||
<!-- see http://docs.codehaus.org/display/SONAR/Narrowing+the+Focus for details of this property -->
|
||||
<sonar.exclusions>target/generated-sources/*</sonar.exclusions>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>${maven.plugin.antrun.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>unzip-schema</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<target>
|
||||
<copy todir="target/schemas">
|
||||
<fileset dir="../../src/ooxml/resources/org/apache/poi/poifs/crypt" includes="encryption*.*"/>
|
||||
</copy>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>${xmlbeans.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1 +0,0 @@
|
||||
This purpose of this marker file is solely to activate the xmlbeans maven profile.
|
@ -1,144 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
<artifactId>poi-ooxml-schema-security</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Apache POI - Openxmlformats Security-Schema package</name>
|
||||
|
||||
<properties>
|
||||
<!-- see http://docs.codehaus.org/display/SONAR/Narrowing+the+Focus for details of this property -->
|
||||
<sonar.exclusions>target/generated-sources/*</sonar.exclusions>
|
||||
<maven.compiler.fork>true</maven.compiler.fork>
|
||||
<xmlbeans.noUpa>true</xmlbeans.noUpa>
|
||||
<xmlbeans.noPvr>true</xmlbeans.noPvr>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Download and unpack the OfficeOpenXML Schema and use xmlbeans to create classes from the XSDs -->
|
||||
<!-- use maven plugin instead of ant tasks get because of caching feature ... -->
|
||||
<plugin>
|
||||
<groupId>com.googlecode.maven-download-plugin</groupId>
|
||||
<artifactId>maven-download-plugin</artifactId>
|
||||
<version>${maven.plugin.download.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>install-xsds-part-1</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals><goal>wget</goal></goals>
|
||||
<configuration>
|
||||
<url>http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip</url>
|
||||
<unpack>true</unpack>
|
||||
<md5>c8f0eac388691d5be0d1647146400a10</md5>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>install-xsds-part-2</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals><goal>wget</goal></goals>
|
||||
<configuration>
|
||||
<outputDirectory>target/schemas</outputDirectory>
|
||||
<url>http://dublincore.org/schemas/xmls/qdc/2003/04/02/dc.xsd</url>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>install-xsds-part-3</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals><goal>wget</goal></goals>
|
||||
<configuration>
|
||||
<outputDirectory>target/schemas</outputDirectory>
|
||||
<url>http://dublincore.org/schemas/xmls/qdc/2003/04/02/dcterms.xsd</url>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>install-xsds-part-4</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals><goal>wget</goal></goals>
|
||||
<configuration>
|
||||
<outputDirectory>target/schemas</outputDirectory>
|
||||
<url>http://dublincore.org/schemas/xmls/qdc/2003/04/02/dcmitype.xsd</url>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>install-xsds-part-5</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals><goal>wget</goal></goals>
|
||||
<configuration>
|
||||
<outputDirectory>target/schemas</outputDirectory>
|
||||
<url>http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd</url>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>install-xsds-part-6</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals><goal>wget</goal></goals>
|
||||
<configuration>
|
||||
<outputDirectory>target/schemas</outputDirectory>
|
||||
<url>http://uri.etsi.org/01903/v1.3.2/XAdES.xsd</url>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>install-xsds-part-7</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals><goal>wget</goal></goals>
|
||||
<configuration>
|
||||
<outputDirectory>target/schemas</outputDirectory>
|
||||
<url>http://uri.etsi.org/01903/v1.4.1/XAdESv141.xsd</url>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>${maven.plugin.antrun.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>unzip-schema</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<target>
|
||||
<echo message="unzip schemas" />
|
||||
<unzip src="target/OpenPackagingConventions-XMLSchema.zip" dest="target/schemas/" />
|
||||
<copy file="../../src/ooxml/resources/org/apache/poi/poifs/crypt/signatureInfo.xsd"
|
||||
todir="target/schemas"/>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>${xmlbeans.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-scratchpad</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1 +0,0 @@
|
||||
This purpose of this marker file is solely to activate the xmlbeans maven profile.
|
@ -1,89 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
<relativePath>..</relativePath>
|
||||
</parent>
|
||||
<artifactId>poi-ooxml-schema</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Apache POI - Openxmlformats Schema package</name>
|
||||
|
||||
<properties>
|
||||
<!-- see http://docs.codehaus.org/display/SONAR/Narrowing+the+Focus for details of this property -->
|
||||
<sonar.exclusions>target/generated-sources/*</sonar.exclusions>
|
||||
<maven.compiler.fork>true</maven.compiler.fork>
|
||||
<xmlbeans.xsdconfig>${basedir}/../../src/ooxml/resources/org/apache/poi/schemas/ooxmlSchemas.xsdconfig</xmlbeans.xsdconfig>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Download and unpack the OfficeOpenXML Schema and use xmlbeans to create classes from the XSDs -->
|
||||
<plugin>
|
||||
<groupId>com.googlecode.maven-download-plugin</groupId>
|
||||
<artifactId>maven-download-plugin</artifactId>
|
||||
<version>${maven.plugin.download.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>download-xsds</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>wget</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<url>http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%204%20(PDF).zip</url>
|
||||
<unpack>true</unpack>
|
||||
<md5>abe6bb6e7799e854934b3c634e8bcf7b</md5>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>${maven.plugin.antrun.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>unzip-schema</id>
|
||||
<phase>generate-sources</phase>
|
||||
<configuration>
|
||||
<target>
|
||||
<echo message="unzip schemas" />
|
||||
<unzip src="target/OfficeOpenXML-XMLSchema.zip" dest="target/schemas" />
|
||||
<copy file="../../src/ooxml/resources/org/apache/poi/xdgf/visio.xsd"
|
||||
todir="target/schemas"/>
|
||||
</target>
|
||||
</configuration>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-scratchpad</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>${xmlbeans.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1 +0,0 @@
|
||||
This purpose of this marker file is solely to activate the xmlbeans maven profile.
|
@ -1,165 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Apache POI OOXML package</name>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- copy sources, resources and tests in place as otherwise Sonar does not pick them up correctly! -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>${maven.plugin.resources.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-sources</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/ooxml/java</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-resources</id>
|
||||
<phase>generate-resources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/resources</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/resources/ooxml</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-tests</id>
|
||||
<phase>generate-test-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/ooxml/testcases</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<!-- clean copied sources afterwards -->
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>${maven.plugin.clean.version}</version>
|
||||
<configuration>
|
||||
<filesets>
|
||||
<fileset>
|
||||
<directory>src</directory>
|
||||
<followSymlinks>false</followSymlinks>
|
||||
</fileset>
|
||||
<fileset>
|
||||
<directory>build</directory>
|
||||
<followSymlinks>false</followSymlinks>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
|
||||
<!-- set jvm parameters for surefire plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${maven.plugin.surefire.version}</version>
|
||||
<configuration>
|
||||
<argLine>@{argLine} -Duser.language=en -Duser.country=US -Xmx1024m -XX:MaxPermSize=256m -XX:-OmitStackTraceInFastThrow</argLine>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-ooxml-schema</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-ooxml-schema-encryption</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-ooxml-schema-security</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>${xmlbeans.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<artifactId>bcpkix-jdk15on</artifactId>
|
||||
<version>1.54</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<artifactId>bcprov-jdk15on</artifactId>
|
||||
<version>1.54</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.santuario</groupId>
|
||||
<artifactId>xmlsec</artifactId>
|
||||
<version>2.0.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.virtuald</groupId>
|
||||
<artifactId>curvesapi</artifactId>
|
||||
<version>1.04</version>
|
||||
</dependency>
|
||||
|
||||
<!-- non-test dependency for OOXMLLite -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
277
sonar/pom.xml
277
sonar/pom.xml
@ -1,277 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
<name>Apache POI - the Java API for Microsoft Documents</name>
|
||||
<description>Maven build of Apache POI for Sonar checks</description>
|
||||
<url>http://poi.apache.org/</url>
|
||||
|
||||
<mailingLists>
|
||||
<mailingList>
|
||||
<name>POI Users List</name>
|
||||
<subscribe>user-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
|
||||
</mailingList>
|
||||
<mailingList>
|
||||
<name>POI Developer List</name>
|
||||
<subscribe>dev-subscribe@poi.apache.org</subscribe>
|
||||
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
|
||||
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
|
||||
</mailingList>
|
||||
</mailingLists>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<issueManagement>
|
||||
<system>Bugzilla</system>
|
||||
<url>https://bz.apache.org/bugzilla/</url>
|
||||
</issueManagement>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:http://svn.apache.org/repos/asf/poi/trunk</connection>
|
||||
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/poi/trunk</developerConnection>
|
||||
<url>http://svn.apache.org/viewvc/poi</url>
|
||||
</scm>
|
||||
|
||||
<modules>
|
||||
<module>main</module>
|
||||
<module>ooxml-schema</module>
|
||||
<module>ooxml-schema-encryption</module>
|
||||
<module>ooxml-schema-security</module>
|
||||
<module>ooxml</module>
|
||||
<module>scratchpad</module>
|
||||
<module>excelant</module>
|
||||
<module>examples</module>
|
||||
</modules>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>ASCII</project.build.sourceEncoding>
|
||||
<!-- Try to disable running SVN blame as it causes errors here because the source is copied from the actual SVN location here! -->
|
||||
<sonar.scm.disabled>true</sonar.scm.disabled>
|
||||
|
||||
<!-- define some of the third-party or plugin-versions globally to use the same in all modules -->
|
||||
<xmlbeans.version>2.6.0</xmlbeans.version>
|
||||
<junit.version>4.12</junit.version>
|
||||
<maven.plugin.resources.version>3.0.1</maven.plugin.resources.version>
|
||||
<maven.plugin.jar.version>3.0.1</maven.plugin.jar.version>
|
||||
<maven.plugin.clean.version>3.0.0</maven.plugin.clean.version>
|
||||
<maven.plugin.download.version>1.1.0</maven.plugin.download.version>
|
||||
<maven.plugin.antrun.version>1.8</maven.plugin.antrun.version>
|
||||
<maven.plugin.surefire.version>2.19.1</maven.plugin.surefire.version>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.5.1</version>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${maven.plugin.surefire.version}</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.surefire</groupId>
|
||||
<artifactId>surefire-junit47</artifactId>
|
||||
<version>${maven.plugin.surefire.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<configuration>
|
||||
<systemPropertyVariables>
|
||||
<POI.testdata.path>../../test-data</POI.testdata.path>
|
||||
<java.awt.headless>true</java.awt.headless>
|
||||
<org.apache.poi.util.POILogger>org.apache.poi.util.NullLogger</org.apache.poi.util.POILogger>
|
||||
</systemPropertyVariables>
|
||||
<!-- use to following to analyze OOM issues: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -->
|
||||
<argLine>@{argLine} -Duser.language=en -Duser.country=US -Xmx1024m</argLine>
|
||||
<excludes>
|
||||
<exclude>**/All*Tests.java</exclude>
|
||||
<exclude>**/TestUnfixedBugs.java</exclude>
|
||||
<exclude>**/TestcaseRecordInputStream.java</exclude>
|
||||
<exclude>**/POITestCase.java</exclude>
|
||||
<!-- TODO: error about no public construct, seems to run with JUnit 3.8... -->
|
||||
<exclude>**/TestWordToConverterSuite*.java</exclude>
|
||||
<exclude>**/TestExcelConverterSuite*.java</exclude>
|
||||
</excludes>
|
||||
<!--test>TestPPTX2PNG</test-->
|
||||
<!--parallel>both</parallel>
|
||||
<threadCount>10</threadCount-->
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<version>0.7.8</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<profiles>
|
||||
<!-- We need a fair amount of memory to compile the xml schema, -->
|
||||
<!-- but limit it in case it goes wrong! -->
|
||||
<!-- Pick the right amount based on 32 vs 64 bit jvm -->
|
||||
<!-- ********************************************************** -->
|
||||
<!-- If you are using IntelliJ, you might want to check -->
|
||||
<!-- http://stackoverflow.com/questions/24115142 -->
|
||||
<!-- ********************************************************** -->
|
||||
<profile>
|
||||
<id>32bitstuff</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>sun.arch.data.model</name>
|
||||
<value>32</value>
|
||||
</property>
|
||||
</activation>
|
||||
<properties>
|
||||
<maven.compiler.maxmem>512m</maven.compiler.maxmem>
|
||||
<argLine>-Xmx768m -XX:MaxPermSize=128m</argLine>
|
||||
</properties>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>64bitstuff</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>sun.arch.data.model</name>
|
||||
<value>64</value>
|
||||
</property>
|
||||
</activation>
|
||||
<properties>
|
||||
<maven.compiler.maxmem>768m</maven.compiler.maxmem>
|
||||
<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
|
||||
</properties>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>xmlbean</id>
|
||||
<activation>
|
||||
<file><exists>xmlbeans.marker</exists></file>
|
||||
</activation>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>xmlbeans-maven-plugin</artifactId>
|
||||
<version>2.3.3</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>process-sources</phase>
|
||||
<goals>
|
||||
<goal>xmlbeans</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<schemaDirectory>${basedir}/target/schemas</schemaDirectory>
|
||||
<javaSource>1.5</javaSource>
|
||||
<noJavac>true</noJavac>
|
||||
<noUpa>${xmlbeans.noUpa}</noUpa>
|
||||
<noPvr>${xmlbeans.noPvr}</noPvr>
|
||||
<xmlConfigs>
|
||||
<xmlConfig implementation="java.io.File">${basedir}/../../src/ooxml/resources/org/apache/poi/poifs/crypt/encryptionCertificate.xsdconfig</xmlConfig>
|
||||
<xmlConfig implementation="java.io.File">${basedir}/../../src/ooxml/resources/org/apache/poi/poifs/crypt/encryptionInfo.xsdconfig</xmlConfig>
|
||||
<xmlConfig implementation="java.io.File">${basedir}/../../src/ooxml/resources/org/apache/poi/poifs/crypt/encryptionPassword.xsdconfig</xmlConfig>
|
||||
<xmlConfig implementation="java.io.File">${basedir}/../../src/ooxml/resources/org/apache/poi/schemas/ooxmlSchemas.xsdconfig</xmlConfig>
|
||||
</xmlConfigs>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>${maven.plugin.antrun.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-xmltype-and-xsdconfig</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals><goal>run</goal></goals>
|
||||
<configuration>
|
||||
<target>
|
||||
<copy todir="${basedir}/target/generated-sources/xmlbeans">
|
||||
<fileset dir="${basedir}/../../src/ooxml/java">
|
||||
<include name="org/apache/poi/POIXMLTypeLoader.java"/>
|
||||
<include name="org/apache/poi/util/DocumentHelper.java"/>
|
||||
<include name="org/apache/poi/util/SAXHelper.java"/>
|
||||
</fileset>
|
||||
<fileset dir="${basedir}/../../src/java">
|
||||
<include name="org/apache/poi/util/POILogFactory.java"/>
|
||||
<include name="org/apache/poi/util/POILogger.java"/>
|
||||
<include name="org/apache/poi/util/NullLogger.java"/>
|
||||
<include name="org/apache/poi/util/Internal.java"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
<copy todir="${basedir}/target/schemas">
|
||||
<fileset dir="${basedir}/../../src/ooxml/resources/org/apache/poi/schemas"/>
|
||||
</copy>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>replace-xmltypeloader</id>
|
||||
<phase>process-sources</phase>
|
||||
<goals><goal>run</goal></goals>
|
||||
<configuration>
|
||||
<target>
|
||||
<replace dir="${basedir}/target/generated-sources/xmlbeans" includes="**/*.java" excludes="**/impl/**">
|
||||
<replacetoken>org.apache.xmlbeans.XmlBeans.getContextTypeLoader()</replacetoken>
|
||||
<replacevalue>org.apache.poi.POIXMLTypeLoader</replacevalue>
|
||||
</replace>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>remove-xmltypeloader-from-schema-jar</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals><goal>run</goal></goals>
|
||||
<configuration>
|
||||
<target>
|
||||
<touch file="${basedir}/target/generated-sources/xmlbeans/.staleFlag"/>
|
||||
<delete dir="${basedir}/target/classes/org/apache"/>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.xmlbeans</groupId>
|
||||
<artifactId>xmlbeans</artifactId>
|
||||
<version>${xmlbeans.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
@ -1,109 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||
http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-parent</artifactId>
|
||||
<version>3.16-beta3-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>poi-scratchpad</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Apache POI Scratchpad package</name>
|
||||
|
||||
<properties>
|
||||
<!-- Exclude some generated code from Sonar analysis -->
|
||||
<sonar.exclusions>src/main/java/org/apache/poi/hwpf/model/types/*,src/main/java/org/apache/poi/hdf/model/hdftypes/definitions/*</sonar.exclusions>
|
||||
</properties>
|
||||
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- copy sources, resources and tests in place as otherwise Sonar does not pick them up correctly! -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>${maven.plugin.resources.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-sources</id>
|
||||
<!-- here the phase you need -->
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/scratchpad/src</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-resources</id>
|
||||
<!-- here the phase you need -->
|
||||
<phase>generate-resources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/main/resources</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/resources/scratchpad</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-tests</id>
|
||||
<!-- here the phase you need -->
|
||||
<phase>generate-test-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/java</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>../../src/scratchpad/testcases</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- clean copied sources afterwards -->
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>${maven.plugin.clean.version}</version>
|
||||
<configuration>
|
||||
<filesets>
|
||||
<fileset>
|
||||
<directory>src</directory>
|
||||
<followSymlinks>false</followSymlinks>
|
||||
</fileset>
|
||||
</filesets>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>poi-main</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -1,332 +0,0 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
# Makefile for building Poi4R
|
||||
#
|
||||
# Supported operating systems: Linux, Mac OS X and Windows.
|
||||
# See INSTALL file for requirements.
|
||||
#
|
||||
# Steps to build
|
||||
# 1. Edit the sections below as documented
|
||||
# 2. make all
|
||||
# 3. make install
|
||||
#
|
||||
# The install target installs the Poi4R python extension in python's
|
||||
# site-packages directory. On Mac OS X, it also installs the gcj runtime
|
||||
# libraries into $(PREFIX)/lib.
|
||||
#
|
||||
# To successfully import the Poi4R extension into Ruby, all required
|
||||
# libraries need to be found. If the locations you chose are non-standard,
|
||||
# the relevant DYLD_LIBRARY_PATH (Mac OS X), LD_LIBRARY_PATH (Linux), or
|
||||
# PATH (Windows) need to be set accordingly.
|
||||
#
|
||||
|
||||
|
||||
VERSION=0.1.0
|
||||
POI_VER=$(shell grep '<property name="version.id"' ../../../build.xml | awk -F'"' '{print $$4}')
|
||||
RUBY_VER=1.8
|
||||
|
||||
POI4R:=$(shell pwd)
|
||||
POI=$(POI4R)/poi-$(POI_VER)
|
||||
#DEBUG=1
|
||||
|
||||
#
|
||||
# You need to uncomment and edit the variables below in the section
|
||||
# corresponding to your operating system.
|
||||
#
|
||||
# PREFIX: where programs are normally installed on your system (Unix).
|
||||
# PREFIX_RUBY: where your version of python is installed.
|
||||
# GCJ_HOME: where GCC/GCJ is installed.
|
||||
# Windows drive-absolute paths need to be expressed cygwin style.
|
||||
#
|
||||
|
||||
# Mac OS X (Darwin)
|
||||
#PREFIX=/usr/local
|
||||
#PREFIX_RUBY=/Library/Frameworks/Ruby.framework/Versions/$(RUBY_VER)
|
||||
#SWIG=$(PREFIX)/bin/swig
|
||||
#GCJ_HOME=/usr/local/gcc-3.4.1
|
||||
#DB=$(POI4R)/db-$(DB_VER)
|
||||
#PREFIX_DB=/usr/local/BerkeleyDB.$(DB_LIB_VER)
|
||||
|
||||
# Linux
|
||||
PREFIX=/usr
|
||||
PREFIX_RUBY=$(PREFIX)
|
||||
SWIG=$(PREFIX)/bin/swig
|
||||
GCJ_HOME=/usr
|
||||
#DB=$(POI4R)/db-$(DB_VER)
|
||||
#PREFIX_DB=$(PREFIX)/BerkeleyDB.$(DB_LIB_VER)
|
||||
|
||||
# Windows
|
||||
#PREFIX_RUBY=/cygdrive/o/Python-2.3.2
|
||||
#SWIG=/cygdrive/c/utils/bin/swig.exe
|
||||
#GCJ_HOME=/cygdrive/o/mingw-3.1
|
||||
#DB=/cygdrive/o/db-$(DB_VER)
|
||||
#PREFIX_DB=$(DB)
|
||||
|
||||
#
|
||||
# No edits required below
|
||||
#
|
||||
|
||||
OS=$(shell uname)
|
||||
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
|
||||
OS=Cygwin
|
||||
endif
|
||||
ifeq ($(findstring WINNT,$(OS)),WINNT)
|
||||
OS=Cygwin
|
||||
endif
|
||||
|
||||
ifeq ($(DEBUG),1)
|
||||
COMP_OPT=DEBUG=1
|
||||
SUFFIX=d
|
||||
_SUFFIX=_d
|
||||
BINDIR=debug
|
||||
else
|
||||
COMP_OPT=
|
||||
SUFFIX=
|
||||
_SUFFIX=
|
||||
BINDIR=release
|
||||
endif
|
||||
|
||||
SWIG_OPT=-DSWIG_COBJECT_TYPES -DPOI4R_VER="'$(VERSION)'" -DPOI_VER="'$(POI_VER)'"
|
||||
|
||||
JCCFLAGS=--encoding=UTF-8
|
||||
#JCCFLAGS=--encoding=UTF-8 -findirect-dispatch
|
||||
|
||||
ifeq ($(OS),Darwin)
|
||||
RUBY_SITE=$(PREFIX_RUBY)/lib/ruby$(RUBY_VER)/site-packages
|
||||
RUBY_INC=$(PREFIX_RUBY)/lib/ruby$(RUBY_VER)
|
||||
POI4R=$(BINDIR)/poi4r.so
|
||||
ifeq ($(DEBUG),1)
|
||||
CCFLAGS=-O0 -g
|
||||
LDFLAGS=-g
|
||||
else
|
||||
CCFLAGS=-O2
|
||||
LDFLAGS=
|
||||
endif
|
||||
else
|
||||
|
||||
ifeq ($(OS),Linux)
|
||||
RUBY_SITE=$(PREFIX_RUBY)/lib/ruby/site-ruby/$(RUBY_VER)/
|
||||
RUBY_INC=$(PREFIX_RUBY)/lib/ruby/$(RUBY_VER)/i686-linux
|
||||
POI4R_LIB=$(BINDIR)/poi4r.so
|
||||
ifeq ($(DEBUG),1)
|
||||
CCFLAGS=-O0 -g -fPIC
|
||||
LDFLAGS=-g
|
||||
else
|
||||
CCFLAGS=-O2 -fPIC
|
||||
LDFLAGS=
|
||||
endif
|
||||
else
|
||||
|
||||
ifeq ($(OS),Cygwin)
|
||||
RUBY_SITE=`cygpath -aw $(PREFIX_RUBY)/Lib/site-packages`
|
||||
RUBY_INC=`cygpath -aw $(PREFIX_RUBY)/Include`
|
||||
RUBY_PC=`cygpath -aw $(PREFIX_RUBY)/PC`
|
||||
POI4R_LIB=$(BINDIR)/poi4r$(_SUFFIX).so
|
||||
ifeq ($(DEBUG),1)
|
||||
CCFLAGS=-O -g
|
||||
LDFLAGS=-g
|
||||
else
|
||||
CCFLAGS=-O2
|
||||
LDFLAGS=
|
||||
endif
|
||||
else
|
||||
|
||||
RUBY=unknown
|
||||
RUBY_SITE=unknown
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
CLASSES=$(BINDIR)/classes
|
||||
JAR_CLASSES=$(CLASSES)/jar
|
||||
|
||||
CC=$(GCJ_HOME)/bin/gcc
|
||||
CXX=$(GCJ_HOME)/bin/g++
|
||||
JCC=$(GCJ_HOME)/bin/gcj
|
||||
JCCH=$(GCJ_HOME)/bin/gcjh
|
||||
JAR=$(GCJ_HOME)/bin/jar
|
||||
POI_ZIP=poi-$(POI_VER).jar
|
||||
POI_JAR=poi-$(POI_VER).jar
|
||||
POI_JAR_WC=poi-$(POI_VER)-*.jar
|
||||
|
||||
POI4R_CP:=$(BINDIR)/$(POI_JAR):$(CLASSES)
|
||||
|
||||
OBJS=$(BINDIR)/poi.o $(BINDIR)/io.java.o $(BINDIR)/io.cpp.o
|
||||
|
||||
LIBS=$(POI4R_LIB)
|
||||
|
||||
default: all
|
||||
|
||||
patches:
|
||||
|
||||
|
||||
env:
|
||||
ifndef PREFIX_RUBY
|
||||
@echo Operating system is $(OS)
|
||||
@echo You need to edit that section of the Makefile
|
||||
@false
|
||||
else
|
||||
@true
|
||||
endif
|
||||
|
||||
|
||||
$(BINDIR):
|
||||
mkdir -p $(BINDIR)/classes/jar
|
||||
|
||||
|
||||
DISTRIB=Poi-$(VERSION)
|
||||
|
||||
ifeq ($(OS),Cygwin)
|
||||
POI4R_CP:=`cygpath -awp $(POI4R_CP)`
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(OS),Cygwin)
|
||||
_poi=`cygpath -aw $(POI)`
|
||||
else
|
||||
_poi=$(POI)
|
||||
endif
|
||||
|
||||
$(BINDIR)/$(POI_JAR):
|
||||
cp ../../../build/dist/$(POI_JAR_WC) $(BINDIR)/$(POI_JAR)
|
||||
cd $(JAR_CLASSES); $(JAR) -xf ../../$(POI_JAR)
|
||||
|
||||
$(BINDIR)/io.java.o: java/org/apache/poi/RubyOutputStream.java
|
||||
$(JCC) $(JCCFLAGS) -C -d $(CLASSES) java/org/apache/poi/RubyOutputStream.java
|
||||
$(JCC) $(JCCFLAGS) $(CCFLAGS) -I$(GCJ_HOME)/include -c -o $@ java/org/apache/poi/RubyOutputStream.java
|
||||
|
||||
$(CLASSES)/org/apache/poi/RubyOutputStream.h: $(BINDIR)/io.java.o Makefile
|
||||
mkdir -p $(CLASSES)/org/apache/poi/hssf/usermodel
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFWorkbook
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFSheet
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFRow
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFCell
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFHeader
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFFooter
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFFont
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFDataFormat
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFCellStyle
|
||||
$(JCCH) -d $(CLASSES) --classpath=$(CLASSES) org.apache.poi.RubyOutputStream
|
||||
|
||||
|
||||
$(BINDIR)/io.cpp.o: $(CLASSES)/org/apache/poi/RubyOutputStream.h cpp/RubyIO.cpp $(BINDIR)/io.java.o
|
||||
$(JCC) -I$(RUBY_INC) -I$(GCJ_HOME)/include -I$(CLASSES) $(CCFLAGS) -c -o $@ cpp/RubyIO.cpp
|
||||
|
||||
$(BINDIR)/poi.o: $(BINDIR)/$(POI_JAR)
|
||||
$(JCC) $(JCCFLAGS) $(CCFLAGS) -c -o $@ $(BINDIR)/$(POI_JAR)
|
||||
|
||||
Poi4R_wrap.cxx: $(BINDIR)/io.cpp.o Poi4R.i
|
||||
ifdef SWIG
|
||||
$(SWIG) $(SWIG_OPT) -I$(CLASSES) -c++ -ruby Poi4R.i
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(OS),Darwin)
|
||||
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||
$(CXX) -shared -bundle -o $@ $(CCFLAGS) $(SWIG_OPT) $(DB_INC) -I$(GCJ_HOME)/include -I$(CLASSES) -I$(RUBY_INC) Poi4R_wrap.cxx $(OBJS) -L$(GCJ_HOME)/lib -lgcj -liconv -undefined suppress -flat_namespace -multiply_defined suppress
|
||||
else
|
||||
|
||||
ifeq ($(OS),Linux)
|
||||
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||
$(CXX) -shared -o $@ $(CCFLAGS) $(SWIG_OPT) $(DB_INC) -I$(CLASSES) -I$(RUBY_INC) Poi4R_wrap.cxx $(OBJS) -lgcj
|
||||
else
|
||||
|
||||
ifeq ($(OS),Cygwin)
|
||||
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||
$(CXX) -c $(CCFLAGS) $(PYDBG) -D_NO_OLDNAMES -D_off_t=off_t $(SWIG_OPT) $(DB_INC) -I$(CLASSES) -I$(RUBY_PC) -I$(RUBY_INC) -o $(BINDIR)/Poi4R_wrap.o Poi4R_wrap.cxx
|
||||
$(CXX) -shared $(LDFLAGS) -o $@ $(OBJS) `cygpath -aw $(PREFIX_RUBY)/python23$(_SUFFIX).dll` $(BINDIR)/Poi4R_wrap.o -lgcj -lwin32k -lws2_32
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
all: env $(BINDIR) $(LIBS)
|
||||
@echo build of $(POI4R_LIB) complete
|
||||
|
||||
install:: all
|
||||
install Poi4R.rb $(RUBY_SITE)
|
||||
install $(POI4R_LIB) $(RUBY_SITE)
|
||||
|
||||
ifeq ($(OS),Darwin)
|
||||
install::
|
||||
install $(GCJ_HOME)/lib/libgcj.5.dylib $(PREFIX)/lib
|
||||
install $(GCJ_HOME)/lib/libstdc++.6.dylib $(PREFIX)/lib
|
||||
install $(GCJ_HOME)/lib/libgcc_s.1.0.dylib $(PREFIX)/lib
|
||||
else
|
||||
|
||||
ifeq ($(OS),Linux)
|
||||
install::
|
||||
|
||||
else
|
||||
|
||||
ifeq ($(OS),Cygwin)
|
||||
install::
|
||||
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
clean:
|
||||
rm -rf $(BINDIR) Poi4R.rb* Poi4R_wrap.cxx
|
||||
|
||||
realclean: clean
|
||||
rm -rf $(POI) $(STORE) $(DISTRIB)
|
||||
|
||||
distrib::
|
||||
mkdir -p $(DISTRIB)/python
|
||||
install Poi4R.rb $(DISTRIB)/python
|
||||
install $(POI4R_LIB) $(DISTRIB)/python
|
||||
install README $(DISTRIB)
|
||||
|
||||
ifeq ($(OS),Darwin)
|
||||
distrib::
|
||||
ifdef DB
|
||||
mkdir -p $(DISTRIB)/db
|
||||
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||
install libdb_java-$(DB_LIB_VER).la.osx $(DISTRIB)/db
|
||||
endif
|
||||
mkdir -p $(DISTRIB)/gcj
|
||||
install $(GCJ_HOME)/lib/libgcj.5.dylib $(DISTRIB)/gcj
|
||||
install $(GCJ_HOME)/lib/libstdc++.6.dylib $(DISTRIB)/gcj
|
||||
install $(GCJ_HOME)/lib/libgcc_s.1.0.dylib $(DISTRIB)/gcj
|
||||
else
|
||||
|
||||
ifeq ($(OS),Linux)
|
||||
distrib::
|
||||
ifdef DB
|
||||
mkdir -p $(DISTRIB)/db
|
||||
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||
endif
|
||||
mkdir -p $(DISTRIB)/gcj
|
||||
install $(GCJ_HOME)/lib/libgcj.so.5 $(DISTRIB)/gcj
|
||||
install $(GCJ_HOME)/lib/libstdc++.so.6 $(DISTRIB)/gcj
|
||||
install $(GCJ_HOME)/lib/libgcc_s.so.1 $(DISTRIB)/gcj
|
||||
else
|
||||
|
||||
ifeq ($(OS),Cygwin)
|
||||
distrib::
|
||||
ifdef DB
|
||||
mkdir -p $(DISTRIB)/db
|
||||
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
@ -1,614 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
%module poi4r
|
||||
|
||||
|
||||
%{
|
||||
|
||||
#include <gcj/cni.h>
|
||||
#include <java/lang/Object.h>
|
||||
#include <java/lang/Thread.h>
|
||||
#include <java/lang/ThreadGroup.h>
|
||||
#include <java/lang/Runnable.h>
|
||||
#include <java/lang/String.h>
|
||||
#include <java/lang/Throwable.h>
|
||||
#include <java/lang/Comparable.h>
|
||||
#include <java/lang/Integer.h>
|
||||
#include <java/lang/Long.h>
|
||||
#include <java/lang/Float.h>
|
||||
#include <java/lang/Double.h>
|
||||
#include <java/io/StringWriter.h>
|
||||
#include <java/io/PrintWriter.h>
|
||||
#include <java/util/HashMap.h>
|
||||
#include <java/util/Date.h>
|
||||
#include <java/util/Calendar.h>
|
||||
#include <java/lang/System.h>
|
||||
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFWorkbook.h"
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFSheet.h"
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFRow.h"
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFCell.h"
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFFont.h"
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFCellStyle.h"
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFDataFormat.h"
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFHeader.h"
|
||||
#include "org/apache/poi/hssf/usermodel/HSSFFooter.h"
|
||||
#include "org/apache/poi/RubyOutputStream.h"
|
||||
|
||||
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFWorkbook *jhworkbook;
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFSheet *jhsheet;
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFRow *jhrow;
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFCell *jhcell;
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFCellStyle *jhcellstyle;
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFFont *jhfont;
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFFooter *jhfooter;
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFHeader *jhheader;
|
||||
typedef ::org::apache::poi::hssf::usermodel::HSSFDataFormat *jhdataformat;
|
||||
|
||||
typedef ::java::util::Date *jdate;
|
||||
typedef ::java::util::Calendar *jcalendar;
|
||||
typedef ::java::io::OutputStream *joutputstream;
|
||||
typedef ::java::io::InputStream *jinputstream;
|
||||
typedef ::java::util::Collection *jstringCollection;
|
||||
typedef ::java::util::Collection *jtermCollection;
|
||||
typedef ::java::util::Locale *jlocale;
|
||||
typedef ::java::lang::Comparable *jcomparable;
|
||||
typedef JArray<jobject> *jobjectArray;
|
||||
typedef JArray<jstring> *jstringArray;
|
||||
|
||||
|
||||
static java::lang::Thread *nextThread;
|
||||
static java::util::HashMap *objects;
|
||||
|
||||
|
||||
static void store_reference(jobject object) {
|
||||
java::lang::Integer *ji =new java::lang::Integer(java::lang::System::identityHashCode(object));
|
||||
jobject jo = objects->get(ji);
|
||||
if (!jo) {
|
||||
// printf("put object in hash\n");
|
||||
objects->put(ji,object);
|
||||
}
|
||||
}
|
||||
static VALUE jo2rv(jobject object, swig_type_info *descriptor)
|
||||
{
|
||||
if (object == NULL)
|
||||
{
|
||||
return Qnil;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SWIG_NewPointerObj((void *) object, descriptor, 0);
|
||||
}
|
||||
}
|
||||
static int cvtptr(VALUE value, void **jo, swig_type_info *info)
|
||||
{
|
||||
if (SWIG_ConvertPtr(value, jo, info, 0) == 0)
|
||||
return 0;
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static int rv2jo(VALUE rv, jobject *jo, swig_type_info *descriptor)
|
||||
{
|
||||
if (NIL_P(rv))
|
||||
*jo = NULL;
|
||||
else
|
||||
{
|
||||
java::lang::Object *javaObj;
|
||||
|
||||
if (cvtptr(rv, (void **) &javaObj, descriptor) == -1)
|
||||
return 0;
|
||||
|
||||
*jo = javaObj;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static jstring r2j(VALUE object)
|
||||
{
|
||||
if (NIL_P(object)){
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
char *ps = STR2CSTR(object);
|
||||
jstring js = JvNewStringLatin1(ps);
|
||||
|
||||
if (!js)
|
||||
{
|
||||
rb_raise(rb_eRuntimeError, "ruby str cannot be converted to java: %s",ps);
|
||||
}
|
||||
|
||||
return js;
|
||||
}
|
||||
}
|
||||
|
||||
VALUE j2r(jstring js)
|
||||
{
|
||||
if (!js)
|
||||
{
|
||||
return Qnil;
|
||||
}
|
||||
else
|
||||
{
|
||||
jint len = JvGetStringUTFLength(js);
|
||||
char buf[len + 1];
|
||||
|
||||
JvGetStringUTFRegion(js, 0, len, buf);
|
||||
buf[len] = '\0';
|
||||
|
||||
return rb_str_new2(buf);
|
||||
}
|
||||
}
|
||||
|
||||
static void free_java_obj(void* arg1) {
|
||||
jobject object =(jobject) arg1;
|
||||
java::lang::Integer *ji =new java::lang::Integer(java::lang::System::identityHashCode(object));
|
||||
jobject jo = objects->get(ji);
|
||||
if (jo) {
|
||||
// printf("removed object from hash\n");
|
||||
objects->remove(ji);
|
||||
}
|
||||
}
|
||||
|
||||
static void raise_ruby_error(java::lang::Throwable *e) {
|
||||
java::io::StringWriter *buffer = new java::io::StringWriter();
|
||||
java::io::PrintWriter *writer = new java::io::PrintWriter(buffer);
|
||||
e->printStackTrace(writer);
|
||||
writer->close();
|
||||
jstring message = buffer->toString();
|
||||
jint len = JvGetStringUTFLength(message);
|
||||
char buf[len + 1];
|
||||
JvGetStringUTFRegion(message, 0, len, buf);
|
||||
buf[len] = '\0';
|
||||
rb_raise(rb_eRuntimeError, "error calling poi \n %s", buf);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
typedef long jint;
|
||||
typedef long long jlong;
|
||||
typedef char jbyte;
|
||||
typedef float jfloat;
|
||||
typedef float jdouble;
|
||||
typedef int jshort;
|
||||
typedef bool jboolean;
|
||||
|
||||
%typemap(in) SWIGTYPE * {
|
||||
|
||||
if (!rv2jo($input, (jobject *) &$1, $1_descriptor))
|
||||
rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping");
|
||||
}
|
||||
%typemap(out) SWIGTYPE * {
|
||||
|
||||
$result = jo2rv($1, $1_descriptor);
|
||||
}
|
||||
|
||||
%typemap(in) org::apache::poi::hssf::usermodel::HSSFWorkbook{
|
||||
|
||||
if (!rv2jo($input, (jobject *) &$1,
|
||||
$descriptor(org::apache::poi::hssf::usermodel::HSSFWorkbook *)))
|
||||
SWIG_fail;
|
||||
}
|
||||
%typemap(out) org::apache::poi::hssf::usermodel::HSSFWorkbook {
|
||||
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFWorkbook *));
|
||||
}
|
||||
|
||||
%typemap(in) jhsheet{
|
||||
|
||||
if (!rv2jo($input, (jobject *) &$1,
|
||||
$descriptor(org::apache::poi::hssf::usermodel::HSSFSheet *)))
|
||||
SWIG_fail;
|
||||
}
|
||||
%typemap(out) jhsheet {
|
||||
|
||||
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFSheet *));
|
||||
}
|
||||
%typemap(in) jhrow{
|
||||
|
||||
if (!rv2jo($input, (jobject *) &$1,
|
||||
$descriptor(org::apache::poi::hssf::usermodel::HSSFRow *)))
|
||||
SWIG_fail;
|
||||
}
|
||||
%typemap(out) jhrow {
|
||||
|
||||
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFRow *));
|
||||
}
|
||||
%typemap(in) jhcell{
|
||||
|
||||
if (!rv2jo($input, (jobject *) &$1,
|
||||
$descriptor(org::apache::poi::hssf::usermodel::HSSFCell *)))
|
||||
SWIG_fail;
|
||||
}
|
||||
%typemap(out) jhcell {
|
||||
|
||||
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFCell *));
|
||||
}
|
||||
%typemap(in) jhfont{
|
||||
|
||||
if (!rv2jo($input, (jobject *) &$1,
|
||||
$descriptor(org::apache::poi::hssf::usermodel::HSSFFont *)))
|
||||
rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFFont");
|
||||
}
|
||||
|
||||
%typemap(out) jhfont {
|
||||
|
||||
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFFont *));
|
||||
}
|
||||
|
||||
%typemap(in) jhcellstyle{
|
||||
|
||||
if (!rv2jo($input, (jobject *) &$1,
|
||||
$descriptor(org::apache::poi::hssf::usermodel::HSSFCellStyle *)))
|
||||
rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFCellStyle");
|
||||
}
|
||||
%typemap(out) jhcellstyle {
|
||||
|
||||
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFCellStyle *));
|
||||
}
|
||||
%typemap(in) jhdataformat{
|
||||
|
||||
if (!rv2jo($input, (jobject *) &$1,
|
||||
$descriptor(org::apache::poi::hssf::usermodel::HSSFDataFormat *)))
|
||||
rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFDataFormat");
|
||||
}
|
||||
%typemap(out) jhdataformat {
|
||||
|
||||
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFDataFormat *));
|
||||
}
|
||||
|
||||
|
||||
%typemap(in) jstring {
|
||||
$1 = r2j($input);
|
||||
}
|
||||
%typemap(out) jstring {
|
||||
$result = j2r($1);
|
||||
}
|
||||
%typecheck(SWIG_TYPECHECK_STRING) jstring {
|
||||
$1 = ( NIL_P($input) || TYPE($input)==T_STRING );
|
||||
}
|
||||
|
||||
%typemap(in) joutputstream {
|
||||
|
||||
jlong ptr;
|
||||
if (!rb_respond_to($input, rb_intern("putc"))) rb_raise(rb_eTypeError,"Expected IO");
|
||||
*(VALUE *) &ptr = (VALUE) $input;
|
||||
$1 = new org::apache::poi::RubyOutputStream(ptr);
|
||||
}
|
||||
%typemap(in) jcalendar {
|
||||
$1 = java::util::Calendar::getInstance();
|
||||
//$1->setTimeInMillis((long long) NUM2DBL(rb_funcall($input,rb_intern("to_i"),0,NULL))*1000.0);
|
||||
$1->set(FIX2INT(rb_funcall($input,rb_intern("year"),0,NULL)),
|
||||
FIX2INT(rb_funcall($input,rb_intern("mon"),0,NULL))-1,
|
||||
FIX2INT(rb_funcall($input,rb_intern("day"),0,NULL)),
|
||||
FIX2INT(rb_funcall($input,rb_intern("hour"),0,NULL)),
|
||||
FIX2INT(rb_funcall($input,rb_intern("min"),0,NULL)),
|
||||
FIX2INT(rb_funcall($input,rb_intern("sec"),0,NULL))
|
||||
);
|
||||
}
|
||||
|
||||
%typecheck(SWIG_TYPECHECK_POINTER) jcalendar {
|
||||
$1 = rb_respond_to($input, rb_intern("asctime"));
|
||||
}
|
||||
|
||||
%typemap(out) jdate {
|
||||
jlong t = ((jdate) $1)->getTime();
|
||||
//TODO: separate seconds and microsecs
|
||||
int ts=t/1000;
|
||||
$result=rb_time_new((time_t) ts, 0 );
|
||||
}
|
||||
|
||||
|
||||
%freefunc org::apache::poi::hssf::usermodel::HSSFWorkbook "free_java_obj";
|
||||
|
||||
%exception {
|
||||
try {
|
||||
$action
|
||||
} catch (java::lang::Throwable *e) {
|
||||
raise_ruby_error(e);
|
||||
}
|
||||
}
|
||||
%exception org::apache::poi::hssf::usermodel::HSSFWorkbook::HSSFWorkbook {
|
||||
try {
|
||||
$action
|
||||
store_reference(result);
|
||||
} catch (java::lang::Throwable *e) {
|
||||
raise_ruby_error(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
namespace java {
|
||||
namespace lang {
|
||||
class Object {
|
||||
jstring toString();
|
||||
};
|
||||
%nodefault;
|
||||
class System : public Object {
|
||||
public:
|
||||
static jstring getProperty(jstring);
|
||||
static jstring getProperty(jstring, jstring);
|
||||
static void load(jstring);
|
||||
static void loadLibrary(jstring);
|
||||
static void mapLibraryName(jstring);
|
||||
static void runFinalization();
|
||||
static void setProperty(jstring, jstring);
|
||||
};
|
||||
%makedefault;
|
||||
}
|
||||
namespace io {
|
||||
%nodefault;
|
||||
class InputStream : public ::java::lang::Object {
|
||||
};
|
||||
class OutputStream : public ::java::lang::Object {
|
||||
};
|
||||
|
||||
%makedefault;
|
||||
}
|
||||
namespace util {
|
||||
class Date : public ::java::lang::Object {
|
||||
public:
|
||||
Date();
|
||||
Date(jlong);
|
||||
void setTime(jlong);
|
||||
jstring toString();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace org {
|
||||
namespace apache {
|
||||
namespace poi {
|
||||
namespace hssf {
|
||||
namespace usermodel {
|
||||
%nodefault;
|
||||
class HSSFWorkbook : public ::java::lang::Object {
|
||||
public:
|
||||
HSSFWorkbook();
|
||||
jstring getSheetName(jint);
|
||||
jint getNumberOfSheets();
|
||||
void setSheetOrder(jstring,jint);
|
||||
void setSheetName(jint,jstring);
|
||||
void setSheetName(jint,jstring,jshort);
|
||||
jint getSheetIndex(jstring);
|
||||
jhsheet createSheet();
|
||||
jhsheet cloneSheet(jint);
|
||||
jhsheet createSheet(jstring);
|
||||
jhsheet getSheetAt(jint);
|
||||
jhsheet getSheet(jstring);
|
||||
void removeSheetAt(jint);
|
||||
jhcellstyle createCellStyle();
|
||||
jhfont createFont();
|
||||
jhdataformat createDataFormat();
|
||||
void write(joutputstream);
|
||||
|
||||
};
|
||||
|
||||
class HSSFSheet : public ::java::lang::Object {
|
||||
public:
|
||||
jhrow createRow(jint);
|
||||
jhrow getRow(jint);
|
||||
jhfooter getFooter();
|
||||
jhheader getHeader();
|
||||
};
|
||||
class HSSFRow : public ::java::lang::Object {
|
||||
public:
|
||||
jhcell createCell(jshort);
|
||||
jhcell getCell(jshort);
|
||||
//jboolean getProtect(); //only in 2.5
|
||||
|
||||
};
|
||||
class HSSFCell : public ::java::lang::Object {
|
||||
public:
|
||||
void setCellValue(jdouble);
|
||||
void setCellValue(jstring);
|
||||
void setCellValue(jboolean);
|
||||
void setCellValue(jcalendar);
|
||||
void setCellFormula(jstring);
|
||||
jstring getStringCellValue();
|
||||
jdouble getNumericCellValue();
|
||||
jdate getDateCellValue();
|
||||
jstring getCellFormula();
|
||||
jboolean getBooleanCellValue();
|
||||
jint getCellType();
|
||||
jshort getEncoding();
|
||||
void setAsActiveCell();
|
||||
|
||||
void setCellStyle(jhcellstyle);
|
||||
void setEncoding(jshort encoding);
|
||||
|
||||
static const jint CELL_TYPE_BLANK;
|
||||
static const jint CELL_TYPE_BOOLEAN;
|
||||
static const jint CELL_TYPE_ERROR;
|
||||
static const jint CELL_TYPE_FORMULA;
|
||||
static const jint CELL_TYPE_NUMERIC;
|
||||
static const jint CELL_TYPE_STRING;
|
||||
|
||||
static const jshort ENCODING_COMPRESSED_UNICODE;
|
||||
static const jshort ENCODING_UTF_16;
|
||||
};
|
||||
class HSSFCellStyle : public ::java::lang::Object {
|
||||
public:
|
||||
static const jshort ALIGN_CENTER;
|
||||
static const jshort ALIGN_CENTER_SELECTION;
|
||||
static const jshort ALIGN_FILL;
|
||||
static const jshort ALIGN_GENERAL;
|
||||
static const jshort ALIGN_JUSTIFY;
|
||||
static const jshort ALIGN_LEFT;
|
||||
static const jshort ALIGN_RIGHT;
|
||||
static const jshort ALT_BARS;
|
||||
static const jshort BIG_SPOTS;
|
||||
static const jshort BORDER_DASH_DOT;
|
||||
static const jshort BORDER_DASH_DOT_DOT;
|
||||
static const jshort BORDER_DASHED;
|
||||
static const jshort BORDER_DOTTED;
|
||||
static const jshort BORDER_DOUBLE;
|
||||
static const jshort BORDER_HAIR;
|
||||
static const jshort BORDER_MEDIUM;
|
||||
static const jshort BORDER_MEDIUM_DASH_DOT;
|
||||
static const jshort BORDER_MEDIUM_DASH_DOT_DOT;
|
||||
static const jshort BORDER_MEDIUM_DASHED;
|
||||
static const jshort BORDER_NONE;
|
||||
static const jshort BORDER_SLANTED_DASH_DOT;
|
||||
static const jshort BORDER_THICK;
|
||||
static const jshort BORDER_THIN;
|
||||
static const jshort BRICKS;
|
||||
static const jshort DIAMONDS;
|
||||
static const jshort FINE_DOTS;
|
||||
static const jshort NO_FILL;
|
||||
static const jshort SOLID_FOREGROUND;
|
||||
static const jshort SPARSE_DOTS;
|
||||
static const jshort SQUARES;
|
||||
static const jshort THICK_BACKWARD_DIAG;
|
||||
static const jshort THICK_FORWARD_DIAG;
|
||||
static const jshort THICK_HORZ_BANDS;
|
||||
static const jshort THICK_VERT_BANDS;
|
||||
static const jshort THIN_BACKWARD_DIAG;
|
||||
static const jshort THIN_FORWARD_DIAG;
|
||||
static const jshort THIN_HORZ_BANDS;
|
||||
static const jshort THIN_VERT_BANDS;
|
||||
static const jshort VERTICAL_BOTTOM;
|
||||
static const jshort VERTICAL_CENTER;
|
||||
static const jshort VERTICAL_JUSTIFY;
|
||||
static const jshort VERTICAL_TOP;
|
||||
|
||||
jshort getAlignment();
|
||||
jshort getBorderBottom();
|
||||
jshort getBorderLeft();
|
||||
jshort getBorderRight();
|
||||
jshort getBorderTop();
|
||||
jshort getBottomBorderColor();
|
||||
jshort getDataFormat();
|
||||
jshort getFillBackgroundColor();
|
||||
jshort getFillForegroundColor();
|
||||
jshort getFillPattern();
|
||||
jshort getFontIndex();
|
||||
jboolean getHidden();
|
||||
jshort getIndention();
|
||||
jshort getIndex();
|
||||
jshort getLeftBorderColor();
|
||||
jboolean getLocked();
|
||||
jshort getRightBorderColor();
|
||||
jshort getRotation();
|
||||
jshort getTopBorderColor();
|
||||
jshort getVerticalAlignment();
|
||||
jboolean getWrapText();
|
||||
void setAlignment(jshort) ;
|
||||
void setBorderBottom(jshort );
|
||||
void setBorderLeft(jshort );
|
||||
void setBorderRight(jshort );
|
||||
void setBorderTop(jshort );
|
||||
void setBottomBorderColor(jshort );
|
||||
void setDataFormat(jshort );
|
||||
void setFillBackgroundColor(jshort );
|
||||
void setFillForegroundColor(jshort );
|
||||
void setFillPattern(jshort );
|
||||
void setFont(jhfont );
|
||||
void setHidden(jboolean );
|
||||
void setIndention(jshort );
|
||||
void setLeftBorderColor(jshort );
|
||||
void setLocked(jboolean );
|
||||
void setRightBorderColor(jshort );
|
||||
void setRotation(jshort );
|
||||
void setTopBorderColor(jshort );
|
||||
void setVerticalAlignment(jshort );
|
||||
void setWrapText(jboolean );
|
||||
};
|
||||
class HSSFDataFormat : public ::java::lang::Object {
|
||||
public:
|
||||
static jstring getBuiltinFormat(jshort);
|
||||
static jshort getBuiltinFormat(jstring);
|
||||
jstring getFormat(jshort);
|
||||
jshort getFormat(jstring);
|
||||
static jint getNumberOfBuiltinBuiltinFormats();
|
||||
//TODO static jlist getBuiltinFormats();
|
||||
|
||||
};
|
||||
class HSSFFont : public ::java::lang::Object {
|
||||
public:
|
||||
static const jshort BOLDWEIGHT_BOLD;
|
||||
static const jshort BOLDWEIGHT_NORMAL;
|
||||
static const jshort COLOR_NORMAL;
|
||||
static const jshort COLOR_RED;
|
||||
static const jstring FONT_ARIAL;
|
||||
static const jshort SS_NONE;
|
||||
static const jshort SS_SUB;
|
||||
static const jshort SS_SUPER;
|
||||
static const jshort U_DOUBLE;
|
||||
static const jshort U_DOUBLE_ACCOUNTING;
|
||||
static const jshort U_NONE;
|
||||
static const jshort U_SINGLE;
|
||||
static const jshort U_SINGLE_ACCOUNTING;
|
||||
|
||||
jshort getBoldweight();
|
||||
jshort getColor();
|
||||
jshort getFontHeight();
|
||||
jshort getFontHeightInPoints();
|
||||
jstring getFontName();
|
||||
jshort getIndex();
|
||||
jboolean getItalic();
|
||||
jboolean getStrikeout();
|
||||
jshort getTypeOffset();
|
||||
jshort getUnderline();
|
||||
void setBoldweight(jshort );
|
||||
void setColor(jshort );
|
||||
void setFontHeight(jshort );
|
||||
void setFontHeightInPoints(jshort );
|
||||
void setFontName(jstring );
|
||||
void setItalic(jboolean );
|
||||
void setStrikeout(jboolean );
|
||||
void setTypeOffset(jshort );
|
||||
void setUnderline(jshort );
|
||||
};
|
||||
%makedefault;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
%init %{
|
||||
|
||||
JvCreateJavaVM(NULL);
|
||||
JvAttachCurrentThread(NULL, NULL);
|
||||
|
||||
nextThread = new java::lang::Thread();
|
||||
objects = new java::util::HashMap();
|
||||
|
||||
java::util::HashMap *props = (java::util::HashMap *)
|
||||
java::lang::System::getProperties();
|
||||
props->put(JvNewStringUTF("inRuby"), objects);
|
||||
|
||||
JvInitClass(&org::apache::poi::hssf::usermodel::HSSFFont::class$);
|
||||
JvInitClass(&org::apache::poi::hssf::usermodel::HSSFCell::class$);
|
||||
JvInitClass(&org::apache::poi::hssf::usermodel::HSSFSheet::class$);
|
||||
JvInitClass(&org::apache::poi::hssf::usermodel::HSSFCellStyle::class$);
|
||||
|
||||
%}
|
||||
|
@ -1,44 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
#include <gcj/cni.h>
|
||||
|
||||
#include "ruby.h"
|
||||
#include "org/apache/poi/RubyOutputStream.h"
|
||||
|
||||
|
||||
/**
|
||||
* The native functions declared in org.apache.poi.RubyoutputStream
|
||||
*
|
||||
* @author aviks
|
||||
*/
|
||||
|
||||
namespace org {
|
||||
namespace apache {
|
||||
namespace poi {
|
||||
|
||||
void RubyOutputStream::close(void)
|
||||
{
|
||||
rb_funcall3((VALUE ) rubyIO, rb_intern("close"), 0, NULL);
|
||||
}
|
||||
|
||||
void RubyOutputStream::write(jint toWrite)
|
||||
{
|
||||
rb_funcall((VALUE ) rubyIO, rb_intern("putc"),1,INT2FIX(toWrite));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi;
|
||||
|
||||
|
||||
import java.io.OutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author aviks
|
||||
* Wrap a java.io.OutputStream around a Ruby IO object
|
||||
*/
|
||||
|
||||
public class RubyOutputStream extends OutputStream {
|
||||
|
||||
//pointer to native ruby VALUE
|
||||
protected long rubyIO;
|
||||
|
||||
public RubyOutputStream (long rubyIO)
|
||||
{
|
||||
this.rubyIO = rubyIO;
|
||||
// incRef();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize()
|
||||
throws Throwable
|
||||
{
|
||||
// decRef();
|
||||
}
|
||||
|
||||
// protected native void incRef();
|
||||
// protected native void decRef();
|
||||
|
||||
@Override
|
||||
public native void close()
|
||||
throws IOException;
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.io.OutputStream#write(int)
|
||||
*/
|
||||
@Override
|
||||
public native void write(int arg0) throws IOException;
|
||||
}
|
||||
|
@ -1,100 +0,0 @@
|
||||
# ====================================================================
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ====================================================================
|
||||
|
||||
require 'test/unit'
|
||||
require 'release/poi4r'
|
||||
|
||||
class TC_base_tests < Test::Unit::TestCase
|
||||
|
||||
def setup()
|
||||
end
|
||||
|
||||
def test_get_constant
|
||||
h=Poi4r::HSSFWorkbook.new
|
||||
s=h.createSheet("Sheet1")
|
||||
r=s.createRow(0)
|
||||
c=r.createCell(0)
|
||||
assert_equal(3,Poi4r::HSSFCell.CELL_TYPE_BLANK,"Constant CELL_TYPE_BLANK")
|
||||
end
|
||||
|
||||
def test_base
|
||||
system("rm test.xls")
|
||||
h=Poi4r::HSSFWorkbook.new
|
||||
|
||||
#Test Sheet Creation
|
||||
s=h.createSheet("Sheet1")
|
||||
s=h.createSheet("Sheet2")
|
||||
assert_equal(2,h.getNumberOfSheets(),"Number of sheets is 2")
|
||||
|
||||
#Test setting cell values
|
||||
s=h.getSheetAt(0)
|
||||
r=s.createRow(0)
|
||||
c=r.createCell(0)
|
||||
c.setCellValue(1.5)
|
||||
assert_equal(c.getNumericCellValue(),1.5,"Numeric Cell Value")
|
||||
c=r.createCell(1)
|
||||
c.setCellValue("Ruby")
|
||||
assert_equal(c.getStringCellValue(),"Ruby","String Cell Value")
|
||||
#Test error handling
|
||||
assert_raise (RuntimeError) {c.getNumericCellValue()}
|
||||
|
||||
#Test styles
|
||||
st = h.createCellStyle()
|
||||
c=r.createCell(2)
|
||||
st.setAlignment(Poi4r::HSSFCellStyle.ALIGN_CENTER)
|
||||
c.setCellStyle(st)
|
||||
c.setCellValue("centr'd")
|
||||
|
||||
#Date handling
|
||||
c=r.createCell(3)
|
||||
t1=Time.now
|
||||
c.setCellValue(Time.now)
|
||||
t2= c.getDateCellValue().gmtime
|
||||
assert_equal(t1.year,t2.year,"year")
|
||||
assert_equal(t1.mon,t2.mon,"month")
|
||||
assert_equal(t1.day,t2.day,"day")
|
||||
assert_equal(t1.hour,t2.hour,"hour")
|
||||
assert_equal(t1.min,t2.min,"min")
|
||||
assert_equal(t1.sec,t2.sec,"sec")
|
||||
st=h.createCellStyle();
|
||||
st.setDataFormat(Poi4r::HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"))
|
||||
c.setCellStyle(st)
|
||||
|
||||
#Fonts
|
||||
c=r.createCell(4)
|
||||
font = h.createFont();
|
||||
font.setFontHeightInPoints(24);
|
||||
font.setFontName("Courier New");
|
||||
font.setItalic(true);
|
||||
font.setStrikeout(true);
|
||||
style = h.createCellStyle();
|
||||
style.setFont(font);
|
||||
c.setCellValue("This is a test of fonts");
|
||||
c.setCellStyle(style);
|
||||
|
||||
#Formulas
|
||||
c=r.createCell(5)
|
||||
c.setCellFormula("A1*2")
|
||||
assert_equal("A1*2",c.getCellFormula,"formula")
|
||||
|
||||
#Test writing
|
||||
h.write(File.new("test.xls","w"))
|
||||
assert_nothing_raised {File.new("test.xls","r")}
|
||||
#h.write(0.1)
|
||||
end
|
||||
|
||||
end
|
@ -1,32 +0,0 @@
|
||||
# ====================================================================
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ====================================================================
|
||||
|
||||
require 'test/unit'
|
||||
require 'release/poi4r'
|
||||
|
||||
class TC_gc < Test::Unit::TestCase
|
||||
def test_premature_collection
|
||||
h=Poi4r::HSSFWorkbook.new
|
||||
h.createSheet("Sheet1");
|
||||
5000.times do
|
||||
hh=Poi4r::HSSFWorkbook.new
|
||||
GC.start()
|
||||
end
|
||||
assert_equal(1,h.getNumberOfSheets(),"Number of sheets")
|
||||
end
|
||||
end
|
||||
|
@ -1,20 +0,0 @@
|
||||
# ====================================================================
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ====================================================================
|
||||
|
||||
require 'test/unit'
|
||||
require 'tests/tc_base_tests'
|
||||
require 'tests/tc_gc'
|
@ -1,116 +0,0 @@
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<%@page contentType="text/html"
|
||||
import="java.io.*,org.apache.poi.poifs.filesystem.POIFSFileSystem,org.apache.poi
|
||||
.hssf.record.*,org.apache.poi.hssf.model.*,org.apache.poi.hssf.usermodel.*,org.a
|
||||
pache.poi.hssf.util.*" %>
|
||||
<html>
|
||||
<head><title>Read Excel file </title>
|
||||
</head>
|
||||
<body>
|
||||
An example of using Jakarta POI's HSSF package to read an excel spreadsheet:
|
||||
|
||||
|
||||
<form name="form1" method="get" action="">
|
||||
Select an Excel file to read.
|
||||
<input type="file" name="xls_filename" onChange="form1.submit()">
|
||||
</form>
|
||||
|
||||
<%
|
||||
String filename = request.getParameter("xls_filename");
|
||||
if (filename != null && !filename.equals("")) {
|
||||
%>
|
||||
<br>You chose the file <%= filename %>.
|
||||
<br><br>It's contents are:
|
||||
<%
|
||||
try
|
||||
{
|
||||
|
||||
// create a poi workbook from the excel spreadsheet file
|
||||
POIFSFileSystem fs =
|
||||
new POIFSFileSystem(new FileInputStream(filename));
|
||||
HSSFWorkbook wb = new HSSFWorkbook(fs);
|
||||
|
||||
for (int k = 0; k < wb.getNumberOfSheets(); k++)
|
||||
{
|
||||
%>
|
||||
<br><br>Sheet <%= k %> <br>
|
||||
<%
|
||||
|
||||
HSSFSheet sheet = wb.getSheetAt(k);
|
||||
int rows = sheet.getPhysicalNumberOfRows();
|
||||
|
||||
for (int r = 0; r < rows; r++)
|
||||
{
|
||||
HSSFRow row = sheet.getRow(r);
|
||||
if (row != null) {
|
||||
int cells = row.getPhysicalNumberOfCells();
|
||||
%>
|
||||
<br><b>ROW <%=
|
||||
row.getRowNum() %> </b>
|
||||
<%
|
||||
for (short c = 0; c < cells; c++)
|
||||
{
|
||||
HSSFCell cell = row.getCell(c);
|
||||
if (cell != null) {
|
||||
String value = null;
|
||||
|
||||
switch (cell.getCellType())
|
||||
{
|
||||
|
||||
case HSSFCell.CELL_TYPE_FORMULA :
|
||||
value = "FORMULA ";
|
||||
break;
|
||||
|
||||
case HSSFCell.CELL_TYPE_NUMERIC :
|
||||
value = "NUMERIC value="
|
||||
+ cell.getNumericCellValue
|
||||
();
|
||||
break;
|
||||
|
||||
case HSSFCell.CELL_TYPE_STRING :
|
||||
value = "STRING value="
|
||||
+ cell.getStringCellValue();
|
||||
break;
|
||||
|
||||
default :
|
||||
}
|
||||
%>
|
||||
<%= "CELL col="
|
||||
|
||||
+ cell.getColumnIndex()
|
||||
+ " VALUE=" + value %>
|
||||
<%
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
%>
|
||||
Error occurred: <%= e.getMessage() %>
|
||||
<%
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
%>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1 +0,0 @@
|
||||
Dummy file so this directory is not deleted by CVS. It's required for the build.
|
@ -1,46 +0,0 @@
|
||||
/*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
package org.apache.poi.crypt.examples;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.apache.poi.poifs.crypt.Decryptor;
|
||||
import org.apache.poi.poifs.crypt.EncryptionInfo;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
|
||||
public class EncryptionUtils {
|
||||
private EncryptionUtils() {
|
||||
}
|
||||
|
||||
public static InputStream decrypt(final InputStream inputStream, final String pwd) throws Exception {
|
||||
try {
|
||||
POIFSFileSystem fs = new POIFSFileSystem(inputStream);
|
||||
EncryptionInfo info = new EncryptionInfo(fs);
|
||||
Decryptor d = Decryptor.getInstance(info);
|
||||
if (!d.verifyPassword(pwd)) {
|
||||
throw new RuntimeException("incorrect password");
|
||||
}
|
||||
return d.getDataStream(fs);
|
||||
} finally {
|
||||
IOUtils.closeQuietly(inputStream);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
/*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
package org.apache.poi.examples.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.util.TempFile;
|
||||
|
||||
public class TempFileUtils {
|
||||
private TempFileUtils() {
|
||||
}
|
||||
|
||||
public static void checkTempFiles() throws IOException {
|
||||
String tmpDir = System.getProperty(TempFile.JAVA_IO_TMPDIR) + "/poifiles";
|
||||
File tempDir = new File(tmpDir);
|
||||
if(tempDir.exists()) {
|
||||
String[] tempFiles = tempDir.list();
|
||||
if(tempFiles != null && tempFiles.length > 0) {
|
||||
System.out.println("found files in poi temp dir " + tempDir.getAbsolutePath());
|
||||
for(String filename : tempFiles) {
|
||||
System.out.println("file: " + filename);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
System.out.println("unable to find poi temp dir");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,499 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hpsf.examples;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.poi.hpsf.HPSFRuntimeException;
|
||||
import org.apache.poi.hpsf.MarkUnsupportedException;
|
||||
import org.apache.poi.hpsf.MutablePropertySet;
|
||||
import org.apache.poi.hpsf.NoPropertySetStreamException;
|
||||
import org.apache.poi.hpsf.PropertySet;
|
||||
import org.apache.poi.hpsf.PropertySetFactory;
|
||||
import org.apache.poi.hpsf.Util;
|
||||
import org.apache.poi.hpsf.WritingNotSupportedException;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReader;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
|
||||
import org.apache.poi.poifs.filesystem.DirectoryEntry;
|
||||
import org.apache.poi.poifs.filesystem.DocumentEntry;
|
||||
import org.apache.poi.poifs.filesystem.DocumentInputStream;
|
||||
import org.apache.poi.poifs.filesystem.Entry;
|
||||
import org.apache.poi.poifs.filesystem.POIFSDocumentPath;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
import org.apache.poi.util.TempFile;
|
||||
|
||||
/**
|
||||
* <p>This class copies a POI file system to a new file and compares the copy
|
||||
* with the original.</p>
|
||||
*
|
||||
* <p>Property set streams are copied logically, i.e. the application
|
||||
* establishes a {@link org.apache.poi.hpsf.PropertySet} of an original property
|
||||
* set, creates a {@link org.apache.poi.hpsf.MutablePropertySet} from the
|
||||
* {@link org.apache.poi.hpsf.PropertySet} and writes the
|
||||
* {@link org.apache.poi.hpsf.MutablePropertySet} to the destination POI file
|
||||
* system. - Streams which are no property set streams are copied bit by
|
||||
* bit.</p>
|
||||
*
|
||||
* <p>The comparison of the POI file systems is done logically. That means that
|
||||
* the two disk files containing the POI file systems do not need to be
|
||||
* exactly identical. However, both POI file systems must contain the same
|
||||
* files, and most of these files must be bitwise identical. Property set
|
||||
* streams, however, are compared logically: they must have the same sections
|
||||
* with the same attributs, and the sections must contain the same properties.
|
||||
* Details like the ordering of the properties do not matter.</p>
|
||||
*/
|
||||
public class CopyCompare
|
||||
{
|
||||
/**
|
||||
* <p>Runs the example program. The application expects one or two
|
||||
* arguments:</p>
|
||||
*
|
||||
* <ol>
|
||||
*
|
||||
* <li><p>The first argument is the disk file name of the POI filesystem to
|
||||
* copy.</p></li>
|
||||
*
|
||||
* <li><p>The second argument is optional. If it is given, it is the name of
|
||||
* a disk file the copy of the POI filesystem will be written to. If it is
|
||||
* not given, the copy will be written to a temporary file which will be
|
||||
* deleted at the end of the program.</p></li>
|
||||
*
|
||||
* </ol>
|
||||
*
|
||||
* @param args Command-line arguments.
|
||||
* @exception MarkUnsupportedException if a POI document stream does not
|
||||
* support the mark() operation.
|
||||
* @exception NoPropertySetStreamException if the application tries to
|
||||
* create a property set from a POI document stream that is not a property
|
||||
* set stream.
|
||||
* @exception IOException if any I/O exception occurs.
|
||||
* @exception UnsupportedEncodingException if a character encoding is not
|
||||
* supported.
|
||||
*/
|
||||
public static void main(final String[] args)
|
||||
throws NoPropertySetStreamException, MarkUnsupportedException,
|
||||
UnsupportedEncodingException, IOException
|
||||
{
|
||||
String originalFileName = null;
|
||||
String copyFileName = null;
|
||||
|
||||
/* Check the command-line arguments. */
|
||||
if (args.length == 1) {
|
||||
originalFileName = args[0];
|
||||
File f = TempFile.createTempFile("CopyOfPOIFileSystem-", ".ole2");
|
||||
f.deleteOnExit();
|
||||
copyFileName = f.getAbsolutePath();
|
||||
} else if (args.length == 2) {
|
||||
originalFileName = args[0];
|
||||
copyFileName = args[1];
|
||||
} else {
|
||||
System.err.println("Usage: " + CopyCompare.class.getName() +
|
||||
"originPOIFS [copyPOIFS]");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
/* Read the origin POIFS using the eventing API. The real work is done
|
||||
* in the class CopyFile which is registered here as a POIFSReader. */
|
||||
final POIFSReader r = new POIFSReader();
|
||||
final CopyFile cf = new CopyFile(copyFileName);
|
||||
r.registerListener(cf);
|
||||
FileInputStream fis = new FileInputStream(originalFileName);
|
||||
r.read(fis);
|
||||
fis.close();
|
||||
|
||||
/* Write the new POIFS to disk. */
|
||||
cf.close();
|
||||
|
||||
/* Read all documents from the original POI file system and compare them
|
||||
* with the equivalent document from the copy. */
|
||||
final POIFSFileSystem opfs = new POIFSFileSystem(new File(originalFileName));
|
||||
final POIFSFileSystem cpfs = new POIFSFileSystem(new File(copyFileName));
|
||||
|
||||
final DirectoryEntry oRoot = opfs.getRoot();
|
||||
final DirectoryEntry cRoot = cpfs.getRoot();
|
||||
final StringBuffer messages = new StringBuffer();
|
||||
if (equal(oRoot, cRoot, messages)) {
|
||||
System.out.println("Equal");
|
||||
} else {
|
||||
System.out.println("Not equal: " + messages.toString());
|
||||
}
|
||||
cpfs.close();
|
||||
opfs.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>Compares two {@link DirectoryEntry} instances of a POI file system.
|
||||
* The directories must contain the same streams with the same names and
|
||||
* contents.</p>
|
||||
*
|
||||
* @param d1 The first directory.
|
||||
* @param d2 The second directory.
|
||||
* @param msg The method may append human-readable comparison messages to
|
||||
* this string buffer.
|
||||
* @return <code>true</code> if the directories are equal, else
|
||||
* <code>false</code>.
|
||||
* @exception MarkUnsupportedException if a POI document stream does not
|
||||
* support the mark() operation.
|
||||
* @exception NoPropertySetStreamException if the application tries to
|
||||
* create a property set from a POI document stream that is not a property
|
||||
* set stream.
|
||||
* @throws UnsupportedEncodingException
|
||||
* @exception IOException if any I/O exception occurs.
|
||||
*/
|
||||
private static boolean equal(final DirectoryEntry d1,
|
||||
final DirectoryEntry d2,
|
||||
final StringBuffer msg)
|
||||
throws NoPropertySetStreamException, MarkUnsupportedException,
|
||||
UnsupportedEncodingException, IOException
|
||||
{
|
||||
boolean equal = true;
|
||||
/* Iterate over d1 and compare each entry with its counterpart in d2. */
|
||||
for (final Entry e1 : d1) {
|
||||
final String n1 = e1.getName();
|
||||
Entry e2 = null;
|
||||
try {
|
||||
e2 = d2.getEntry(n1);
|
||||
} catch (FileNotFoundException ex) {
|
||||
msg.append("Document \"" + e1 + "\" exists, document \"" +
|
||||
e2 + "\" does not.\n");
|
||||
equal = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (e1.isDirectoryEntry() && e2.isDirectoryEntry()) {
|
||||
equal = equal((DirectoryEntry) e1, (DirectoryEntry) e2, msg);
|
||||
} else if (e1.isDocumentEntry() && e2.isDocumentEntry()) {
|
||||
equal = equal((DocumentEntry) e1, (DocumentEntry) e2, msg);
|
||||
} else {
|
||||
msg.append("One of \"" + e1 + "\" and \"" + e2 + "\" is a " +
|
||||
"document while the other one is a directory.\n");
|
||||
equal = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Iterate over d2 just to make sure that there are no entries in d2
|
||||
* that are not in d1. */
|
||||
for (final Entry e2 : d2) {
|
||||
final String n2 = e2.getName();
|
||||
Entry e1 = null;
|
||||
try {
|
||||
e1 = d1.getEntry(n2);
|
||||
} catch (FileNotFoundException ex) {
|
||||
msg.append("Document \"" + e2 + "\" exitsts, document \"" +
|
||||
e1 + "\" does not.\n");
|
||||
equal = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return equal;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>Compares two {@link DocumentEntry} instances of a POI file system.
|
||||
* Documents that are not property set streams must be bitwise identical.
|
||||
* Property set streams must be logically equal.</p>
|
||||
*
|
||||
* @param d1 The first document.
|
||||
* @param d2 The second document.
|
||||
* @param msg The method may append human-readable comparison messages to
|
||||
* this string buffer.
|
||||
* @return <code>true</code> if the documents are equal, else
|
||||
* <code>false</code>.
|
||||
* @exception MarkUnsupportedException if a POI document stream does not
|
||||
* support the mark() operation.
|
||||
* @exception NoPropertySetStreamException if the application tries to
|
||||
* create a property set from a POI document stream that is not a property
|
||||
* set stream.
|
||||
* @throws UnsupportedEncodingException
|
||||
* @exception IOException if any I/O exception occurs.
|
||||
*/
|
||||
private static boolean equal(final DocumentEntry d1, final DocumentEntry d2,
|
||||
final StringBuffer msg)
|
||||
throws NoPropertySetStreamException, MarkUnsupportedException,
|
||||
UnsupportedEncodingException, IOException
|
||||
{
|
||||
final DocumentInputStream dis1 = new DocumentInputStream(d1);
|
||||
final DocumentInputStream dis2 = new DocumentInputStream(d2);
|
||||
try {
|
||||
if (PropertySet.isPropertySetStream(dis1) &&
|
||||
PropertySet.isPropertySetStream(dis2)) {
|
||||
final PropertySet ps1 = PropertySetFactory.create(dis1);
|
||||
final PropertySet ps2 = PropertySetFactory.create(dis2);
|
||||
if (!ps1.equals(ps2)) {
|
||||
msg.append("Property sets are not equal.\n");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
int i1, i2;
|
||||
do {
|
||||
i1 = dis1.read();
|
||||
i2 = dis2.read();
|
||||
if (i1 != i2) {
|
||||
msg.append("Documents are not equal.\n");
|
||||
return false;
|
||||
}
|
||||
} while (i1 > -1);
|
||||
}
|
||||
} finally {
|
||||
dis2.close();
|
||||
dis1.close();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>This class does all the work. Its method {@link
|
||||
* #processPOIFSReaderEvent(POIFSReaderEvent)} is called for each file in
|
||||
* the original POI file system. Except for property set streams it copies
|
||||
* everything unmodified to the destination POI filesystem. Property set
|
||||
* streams are copied by creating a new {@link PropertySet} from the
|
||||
* original property set by using the {@link
|
||||
* MutablePropertySet#MutablePropertySet(PropertySet)} constructor.</p>
|
||||
*/
|
||||
static class CopyFile implements POIFSReaderListener {
|
||||
private String dstName;
|
||||
private OutputStream out;
|
||||
private POIFSFileSystem poiFs;
|
||||
|
||||
|
||||
/**
|
||||
* <p>The constructor of a {@link CopyFile} instance creates the target
|
||||
* POIFS. It also stores the name of the file the POIFS will be written
|
||||
* to once it is complete.</p>
|
||||
*
|
||||
* @param dstName The name of the disk file the destination POIFS is to
|
||||
* be written to.
|
||||
*/
|
||||
public CopyFile(final String dstName) {
|
||||
this.dstName = dstName;
|
||||
poiFs = new POIFSFileSystem();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>The method is called by POI's eventing API for each file in the
|
||||
* origin POIFS.</p>
|
||||
*/
|
||||
@Override
|
||||
public void processPOIFSReaderEvent(final POIFSReaderEvent event) {
|
||||
/* The following declarations are shortcuts for accessing the
|
||||
* "event" object. */
|
||||
final POIFSDocumentPath path = event.getPath();
|
||||
final String name = event.getName();
|
||||
final DocumentInputStream stream = event.getStream();
|
||||
|
||||
Throwable t = null;
|
||||
|
||||
try {
|
||||
/* Find out whether the current document is a property set
|
||||
* stream or not. */
|
||||
if (PropertySet.isPropertySetStream(stream)) {
|
||||
/* Yes, the current document is a property set stream.
|
||||
* Let's create a PropertySet instance from it. */
|
||||
PropertySet ps = null;
|
||||
try {
|
||||
ps = PropertySetFactory.create(stream);
|
||||
} catch (NoPropertySetStreamException ex) {
|
||||
/* This exception will not be thrown because we already
|
||||
* checked above. */
|
||||
}
|
||||
|
||||
/* Copy the property set to the destination POI file
|
||||
* system. */
|
||||
copy(poiFs, path, name, ps);
|
||||
} else {
|
||||
/* No, the current document is not a property set stream. We
|
||||
* copy it unmodified to the destination POIFS. */
|
||||
copy(poiFs, event.getPath(), event.getName(), stream);
|
||||
}
|
||||
} catch (MarkUnsupportedException ex) {
|
||||
t = ex;
|
||||
} catch (IOException ex) {
|
||||
t = ex;
|
||||
} catch (WritingNotSupportedException ex) {
|
||||
t = ex;
|
||||
}
|
||||
|
||||
/* According to the definition of the processPOIFSReaderEvent method
|
||||
* we cannot pass checked exceptions to the caller. The following
|
||||
* lines check whether a checked exception occured and throws an
|
||||
* unchecked exception. The message of that exception is that of
|
||||
* the underlying checked exception. */
|
||||
if (t != null) {
|
||||
throw new HPSFRuntimeException
|
||||
("Could not read file \"" + path + "/" + name +
|
||||
"\". Reason: " + Util.toString(t));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>Writes a {@link PropertySet} to a POI filesystem.</p>
|
||||
*
|
||||
* @param poiFs The POI filesystem to write to.
|
||||
* @param path The file's path in the POI filesystem.
|
||||
* @param name The file's name in the POI filesystem.
|
||||
* @param ps The property set to write.
|
||||
* @throws WritingNotSupportedException
|
||||
* @throws IOException
|
||||
*/
|
||||
public void copy(final POIFSFileSystem poiFs,
|
||||
final POIFSDocumentPath path,
|
||||
final String name,
|
||||
final PropertySet ps)
|
||||
throws WritingNotSupportedException, IOException {
|
||||
final DirectoryEntry de = getPath(poiFs, path);
|
||||
final MutablePropertySet mps = new MutablePropertySet(ps);
|
||||
de.createDocument(name, mps.toInputStream());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>Copies the bytes from a {@link DocumentInputStream} to a new
|
||||
* stream in a POI filesystem.</p>
|
||||
*
|
||||
* @param poiFs The POI filesystem to write to.
|
||||
* @param path The source document's path.
|
||||
* @param name The source document's name.
|
||||
* @param stream The stream containing the source document.
|
||||
* @throws IOException
|
||||
*/
|
||||
public void copy(final POIFSFileSystem poiFs,
|
||||
final POIFSDocumentPath path,
|
||||
final String name,
|
||||
final DocumentInputStream stream)
|
||||
throws IOException {
|
||||
final DirectoryEntry de = getPath(poiFs, path);
|
||||
final ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
int c;
|
||||
while ((c = stream.read()) != -1) {
|
||||
out.write(c);
|
||||
}
|
||||
stream.close();
|
||||
out.close();
|
||||
final InputStream in =
|
||||
new ByteArrayInputStream(out.toByteArray());
|
||||
de.createDocument(name, in);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>Writes the POI file system to a disk file.</p>
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @throws IOException
|
||||
*/
|
||||
public void close() throws FileNotFoundException, IOException {
|
||||
out = new FileOutputStream(dstName);
|
||||
poiFs.writeFilesystem(out);
|
||||
out.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Contains the directory paths that have already been created in the
|
||||
* output POI filesystem and maps them to their corresponding
|
||||
* {@link org.apache.poi.poifs.filesystem.DirectoryNode}s. */
|
||||
private final Map<String,DirectoryEntry> paths = new HashMap<String,DirectoryEntry>();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>Ensures that the directory hierarchy for a document in a POI
|
||||
* fileystem is in place. When a document is to be created somewhere in
|
||||
* a POI filesystem its directory must be created first. This method
|
||||
* creates all directories between the POI filesystem root and the
|
||||
* directory the document should belong to which do not yet exist.</p>
|
||||
*
|
||||
* <p>Unfortunately POI does not offer a simple method to interrogate
|
||||
* the POIFS whether a certain child node (file or directory) exists in
|
||||
* a directory. However, since we always start with an empty POIFS which
|
||||
* contains the root directory only and since each directory in the
|
||||
* POIFS is created by this method we can maintain the POIFS's directory
|
||||
* hierarchy ourselves: The {@link DirectoryEntry} of each directory
|
||||
* created is stored in a {@link Map}. The directories' path names map
|
||||
* to the corresponding {@link DirectoryEntry} instances.</p>
|
||||
*
|
||||
* @param poiFs The POI filesystem the directory hierarchy is created
|
||||
* in, if needed.
|
||||
* @param path The document's path. This method creates those directory
|
||||
* components of this hierarchy which do not yet exist.
|
||||
* @return The directory entry of the document path's parent. The caller
|
||||
* should use this {@link DirectoryEntry} to create documents in it.
|
||||
*/
|
||||
public DirectoryEntry getPath(final POIFSFileSystem poiFs,
|
||||
final POIFSDocumentPath path) {
|
||||
try {
|
||||
/* Check whether this directory has already been created. */
|
||||
final String s = path.toString();
|
||||
DirectoryEntry de = paths.get(s);
|
||||
if (de != null)
|
||||
/* Yes: return the corresponding DirectoryEntry. */
|
||||
return de;
|
||||
|
||||
/* No: We have to create the directory - or return the root's
|
||||
* DirectoryEntry. */
|
||||
int l = path.length();
|
||||
if (l == 0) {
|
||||
/* Get the root directory. It does not have to be created
|
||||
* since it always exists in a POIFS. */
|
||||
de = poiFs.getRoot();
|
||||
} else {
|
||||
/* Create a subordinate directory. The first step is to
|
||||
* ensure that the parent directory exists: */
|
||||
de = getPath(poiFs, path.getParent());
|
||||
/* Now create the target directory: */
|
||||
de = de.createDirectory(path.getComponent
|
||||
(path.length() - 1));
|
||||
}
|
||||
paths.put(s, de);
|
||||
return de;
|
||||
} catch (IOException ex) {
|
||||
/* This exception will be thrown if the directory already
|
||||
* exists. However, since we have full control about directory
|
||||
* creation we can ensure that this will never happen. */
|
||||
ex.printStackTrace(System.err);
|
||||
throw new RuntimeException(ex.toString());
|
||||
/* FIXME (2): Replace the previous line by the following once we
|
||||
* no longer need JDK 1.3 compatibility. */
|
||||
// throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,173 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hpsf.examples;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.poi.hpsf.CustomProperties;
|
||||
import org.apache.poi.hpsf.DocumentSummaryInformation;
|
||||
import org.apache.poi.hpsf.MarkUnsupportedException;
|
||||
import org.apache.poi.hpsf.NoPropertySetStreamException;
|
||||
import org.apache.poi.hpsf.PropertySetFactory;
|
||||
import org.apache.poi.hpsf.SummaryInformation;
|
||||
import org.apache.poi.hpsf.UnexpectedPropertySetTypeException;
|
||||
import org.apache.poi.hpsf.WritingNotSupportedException;
|
||||
import org.apache.poi.poifs.filesystem.DirectoryEntry;
|
||||
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
||||
|
||||
/**
|
||||
* <p>This is a sample application showing how to easily modify properties in
|
||||
* the summary information and in the document summary information. The
|
||||
* application reads the name of a POI filesystem from the command line and
|
||||
* performs the following actions:</p>
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li><p>Open the POI filesystem.</p></li>
|
||||
*
|
||||
* <li><p>Read the summary information.</p></li>
|
||||
*
|
||||
* <li><p>Read and print the "author" property.</p></li>
|
||||
*
|
||||
* <li><p>Change the author to "Rainer Klute".</p></li>
|
||||
*
|
||||
* <li><p>Read the document summary information.</p></li>
|
||||
*
|
||||
* <li><p>Read and print the "category" property.</p></li>
|
||||
*
|
||||
* <li><p>Change the category to "POI example".</p></li>
|
||||
*
|
||||
* <li><p>Read the custom properties (if available).</p></li>
|
||||
*
|
||||
* <li><p>Insert a new custom property.</p></li>
|
||||
*
|
||||
* <li><p>Write the custom properties back to the document summary
|
||||
* information.</p></li>
|
||||
*
|
||||
* <li><p>Write the summary information to the POI filesystem.</p></li>
|
||||
*
|
||||
* <li><p>Write the document summary information to the POI filesystem.</p></li>
|
||||
*
|
||||
* <li><p>Write the POI filesystem back to the original file.</p></li>
|
||||
*
|
||||
* </ol>
|
||||
*/
|
||||
public class ModifyDocumentSummaryInformation {
|
||||
|
||||
/**
|
||||
* <p>Main method - see class description.</p>
|
||||
*
|
||||
* @param args The command-line parameters.
|
||||
* @throws IOException
|
||||
* @throws MarkUnsupportedException
|
||||
* @throws NoPropertySetStreamException
|
||||
* @throws UnexpectedPropertySetTypeException
|
||||
* @throws WritingNotSupportedException
|
||||
*/
|
||||
public static void main(final String[] args) throws IOException,
|
||||
NoPropertySetStreamException, MarkUnsupportedException,
|
||||
UnexpectedPropertySetTypeException, WritingNotSupportedException
|
||||
{
|
||||
/* Read the name of the POI filesystem to modify from the command line.
|
||||
* For brevity to boundary check is performed on the command-line
|
||||
* arguments. */
|
||||
File summaryFile = new File(args[0]);
|
||||
|
||||
/* Open the POI filesystem. */
|
||||
NPOIFSFileSystem poifs = new NPOIFSFileSystem(summaryFile, false);
|
||||
|
||||
/* Read the summary information. */
|
||||
DirectoryEntry dir = poifs.getRoot();
|
||||
SummaryInformation si;
|
||||
try
|
||||
{
|
||||
si = (SummaryInformation)PropertySetFactory.create(
|
||||
dir, SummaryInformation.DEFAULT_STREAM_NAME);
|
||||
}
|
||||
catch (FileNotFoundException ex)
|
||||
{
|
||||
// There is no summary information yet. We have to create a new one
|
||||
si = PropertySetFactory.newSummaryInformation();
|
||||
}
|
||||
|
||||
/* Change the author to "Rainer Klute". Any former author value will
|
||||
* be lost. If there has been no author yet, it will be created. */
|
||||
si.setAuthor("Rainer Klute");
|
||||
System.out.println("Author changed to " + si.getAuthor() + ".");
|
||||
|
||||
|
||||
/* Handling the document summary information is analogous to handling
|
||||
* the summary information. An additional feature, however, are the
|
||||
* custom properties. */
|
||||
|
||||
/* Read the document summary information. */
|
||||
DocumentSummaryInformation dsi;
|
||||
try
|
||||
{
|
||||
dsi = (DocumentSummaryInformation)PropertySetFactory.create(
|
||||
dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME);
|
||||
}
|
||||
catch (FileNotFoundException ex)
|
||||
{
|
||||
/* There is no document summary information yet. We have to create a
|
||||
* new one. */
|
||||
dsi = PropertySetFactory.newDocumentSummaryInformation();
|
||||
}
|
||||
|
||||
/* Change the category to "POI example". Any former category value will
|
||||
* be lost. If there has been no category yet, it will be created. */
|
||||
dsi.setCategory("POI example");
|
||||
System.out.println("Category changed to " + dsi.getCategory() + ".");
|
||||
|
||||
/* Read the custom properties. If there are no custom properties yet,
|
||||
* the application has to create a new CustomProperties object. It will
|
||||
* serve as a container for custom properties. */
|
||||
CustomProperties customProperties = dsi.getCustomProperties();
|
||||
if (customProperties == null)
|
||||
customProperties = new CustomProperties();
|
||||
|
||||
/* Insert some custom properties into the container. */
|
||||
customProperties.put("Key 1", "Value 1");
|
||||
customProperties.put("Schl\u00fcssel 2", "Wert 2");
|
||||
customProperties.put("Sample Number", new Integer(12345));
|
||||
customProperties.put("Sample Boolean", Boolean.TRUE);
|
||||
customProperties.put("Sample Date", new Date());
|
||||
|
||||
/* Read a custom property. */
|
||||
Object value = customProperties.get("Sample Number");
|
||||
System.out.println("Custom Sample Number is now " + value);
|
||||
|
||||
/* Write the custom properties back to the document summary
|
||||
* information. */
|
||||
dsi.setCustomProperties(customProperties);
|
||||
|
||||
/* Write the summary information and the document summary information
|
||||
* to the POI filesystem. */
|
||||
si.write(dir, SummaryInformation.DEFAULT_STREAM_NAME);
|
||||
dsi.write(dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME);
|
||||
|
||||
/* Write the POI filesystem back to the original file. Please note that
|
||||
* in production code you should take care when write directly to the
|
||||
* origin, to make sure you don't loose things on error */
|
||||
poifs.writeFilesystem();
|
||||
poifs.close();
|
||||
}
|
||||
}
|
@ -1,135 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hpsf.examples;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.hpsf.NoPropertySetStreamException;
|
||||
import org.apache.poi.hpsf.Property;
|
||||
import org.apache.poi.hpsf.PropertySet;
|
||||
import org.apache.poi.hpsf.PropertySetFactory;
|
||||
import org.apache.poi.hpsf.Section;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReader;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
|
||||
import org.apache.poi.util.HexDump;
|
||||
|
||||
/**
|
||||
* <p>Sample application showing how to read a document's custom property set.
|
||||
* Call it with the document's file name as command-line parameter.</p>
|
||||
*
|
||||
* <p>Explanations can be found in the HPSF HOW-TO.</p>
|
||||
*/
|
||||
public class ReadCustomPropertySets
|
||||
{
|
||||
|
||||
/**
|
||||
* <p>Runs the example program.</p>
|
||||
*
|
||||
* @param args Command-line arguments (unused).
|
||||
* @throws IOException if any I/O exception occurs.
|
||||
*/
|
||||
public static void main(final String[] args)
|
||||
throws IOException
|
||||
{
|
||||
final String filename = args[0];
|
||||
POIFSReader r = new POIFSReader();
|
||||
|
||||
/* Register a listener for *all* documents. */
|
||||
r.registerListener(new MyPOIFSReaderListener());
|
||||
r.read(new FileInputStream(filename));
|
||||
}
|
||||
|
||||
|
||||
static class MyPOIFSReaderListener implements POIFSReaderListener
|
||||
{
|
||||
@Override
|
||||
public void processPOIFSReaderEvent(final POIFSReaderEvent event)
|
||||
{
|
||||
PropertySet ps = null;
|
||||
try
|
||||
{
|
||||
ps = PropertySetFactory.create(event.getStream());
|
||||
}
|
||||
catch (NoPropertySetStreamException ex)
|
||||
{
|
||||
out("No property set stream: \"" + event.getPath() +
|
||||
event.getName() + "\"");
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new RuntimeException
|
||||
("Property set stream \"" +
|
||||
event.getPath() + event.getName() + "\": " + ex);
|
||||
}
|
||||
|
||||
/* Print the name of the property set stream: */
|
||||
out("Property set stream \"" + event.getPath() +
|
||||
event.getName() + "\":");
|
||||
|
||||
/* Print the number of sections: */
|
||||
final long sectionCount = ps.getSectionCount();
|
||||
out(" No. of sections: " + sectionCount);
|
||||
|
||||
/* Print the list of sections: */
|
||||
List<Section> sections = ps.getSections();
|
||||
int nr = 0;
|
||||
for (Iterator<Section> i = sections.iterator(); i.hasNext();)
|
||||
{
|
||||
/* Print a single section: */
|
||||
Section sec = i.next();
|
||||
out(" Section " + nr++ + ":");
|
||||
String s = hex(sec.getFormatID().getBytes());
|
||||
s = s.substring(0, s.length() - 1);
|
||||
out(" Format ID: " + s);
|
||||
|
||||
/* Print the number of properties in this section. */
|
||||
int propertyCount = sec.getPropertyCount();
|
||||
out(" No. of properties: " + propertyCount);
|
||||
|
||||
/* Print the properties: */
|
||||
Property[] properties = sec.getProperties();
|
||||
for (int i2 = 0; i2 < properties.length; i2++)
|
||||
{
|
||||
/* Print a single property: */
|
||||
Property p = properties[i2];
|
||||
long id = p.getID();
|
||||
long type = p.getType();
|
||||
Object value = p.getValue();
|
||||
out(" Property ID: " + id + ", type: " + type +
|
||||
", value: " + value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void out(final String msg)
|
||||
{
|
||||
System.out.println(msg);
|
||||
}
|
||||
|
||||
static String hex(final byte[] bytes)
|
||||
{
|
||||
return HexDump.dump(bytes, 0L, 0);
|
||||
}
|
||||
|
||||
}
|
@ -1,80 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hpsf.examples;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hpsf.PropertySetFactory;
|
||||
import org.apache.poi.hpsf.SummaryInformation;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReader;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
|
||||
|
||||
/**
|
||||
* <p>Sample application showing how to read a OLE 2 document's
|
||||
* title. Call it with the document's file name as command line
|
||||
* parameter.</p>
|
||||
*
|
||||
* <p>Explanations can be found in the HPSF HOW-TO.</p>
|
||||
*/
|
||||
public class ReadTitle
|
||||
{
|
||||
/**
|
||||
* <p>Runs the example program.</p>
|
||||
*
|
||||
* @param args Command-line arguments. The first command-line argument must
|
||||
* be the name of a POI filesystem to read.
|
||||
* @throws IOException if any I/O exception occurs.
|
||||
*/
|
||||
public static void main(final String[] args) throws IOException
|
||||
{
|
||||
final String filename = args[0];
|
||||
POIFSReader r = new POIFSReader();
|
||||
r.registerListener(new MyPOIFSReaderListener(),
|
||||
"\005SummaryInformation");
|
||||
r.read(new FileInputStream(filename));
|
||||
}
|
||||
|
||||
|
||||
static class MyPOIFSReaderListener implements POIFSReaderListener
|
||||
{
|
||||
@Override
|
||||
public void processPOIFSReaderEvent(final POIFSReaderEvent event)
|
||||
{
|
||||
SummaryInformation si = null;
|
||||
try
|
||||
{
|
||||
si = (SummaryInformation)
|
||||
PropertySetFactory.create(event.getStream());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new RuntimeException
|
||||
("Property set stream \"" +
|
||||
event.getPath() + event.getName() + "\": " + ex);
|
||||
}
|
||||
final String title = si.getTitle();
|
||||
if (title != null)
|
||||
System.out.println("Title: \"" + title + "\"");
|
||||
else
|
||||
System.out.println("Document has no title.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,408 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hpsf.examples;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.poi.hpsf.HPSFRuntimeException;
|
||||
import org.apache.poi.hpsf.MarkUnsupportedException;
|
||||
import org.apache.poi.hpsf.MutablePropertySet;
|
||||
import org.apache.poi.hpsf.MutableSection;
|
||||
import org.apache.poi.hpsf.NoPropertySetStreamException;
|
||||
import org.apache.poi.hpsf.PropertySet;
|
||||
import org.apache.poi.hpsf.PropertySetFactory;
|
||||
import org.apache.poi.hpsf.SummaryInformation;
|
||||
import org.apache.poi.hpsf.Util;
|
||||
import org.apache.poi.hpsf.Variant;
|
||||
import org.apache.poi.hpsf.WritingNotSupportedException;
|
||||
import org.apache.poi.hpsf.wellknown.PropertyIDMap;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReader;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
|
||||
import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
|
||||
import org.apache.poi.poifs.filesystem.DirectoryEntry;
|
||||
import org.apache.poi.poifs.filesystem.DocumentInputStream;
|
||||
import org.apache.poi.poifs.filesystem.POIFSDocumentPath;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
|
||||
/**
|
||||
* <p>This class is a sample application which shows how to write or modify the
|
||||
* author and title property of an OLE 2 document. This could be done in two
|
||||
* different ways:</p>
|
||||
*
|
||||
* <ul>
|
||||
*
|
||||
* <li><p>The first approach is to open the OLE 2 file as a POI filesystem
|
||||
* (see class {@link POIFSFileSystem}), read the summary information property
|
||||
* set (see classes {@link SummaryInformation} and {@link PropertySet}), write
|
||||
* the author and title properties into it and write the property set back into
|
||||
* the POI filesystem.</p></li>
|
||||
*
|
||||
* <li><p>The second approach does not modify the original POI filesystem, but
|
||||
* instead creates a new one. All documents from the original POIFS are copied
|
||||
* to the destination POIFS, except for the summary information stream. The
|
||||
* latter is modified by setting the author and title property before writing
|
||||
* it to the destination POIFS. It there are several summary information streams
|
||||
* in the original POIFS - e.g. in subordinate directories - they are modified
|
||||
* just the same.</p></li>
|
||||
*
|
||||
* </ul>
|
||||
*
|
||||
* <p>This sample application takes the second approach. It expects the name of
|
||||
* the existing POI filesystem's name as its first command-line parameter and
|
||||
* the name of the output POIFS as the second command-line argument. The
|
||||
* program then works as described above: It copies nearly all documents
|
||||
* unmodified from the input POI filesystem to the output POI filesystem. If it
|
||||
* encounters a summary information stream it reads its properties. Then it sets
|
||||
* the "author" and "title" properties to new values and writes the modified
|
||||
* summary information stream into the output file.</p>
|
||||
*
|
||||
* <p>Further explanations can be found in the HPSF HOW-TO.</p>
|
||||
*/
|
||||
public class WriteAuthorAndTitle
|
||||
{
|
||||
/**
|
||||
* <p>Runs the example program.</p>
|
||||
*
|
||||
* @param args Command-line arguments. The first command-line argument must
|
||||
* be the name of a POI filesystem to read.
|
||||
* @throws IOException if any I/O exception occurs.
|
||||
*/
|
||||
public static void main(final String[] args) throws IOException
|
||||
{
|
||||
/* Check whether we have exactly two command-line arguments. */
|
||||
if (args.length != 2)
|
||||
{
|
||||
System.err.println("Usage: " + WriteAuthorAndTitle.class.getName() +
|
||||
" originPOIFS destinationPOIFS");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
/* Read the names of the origin and destination POI filesystems. */
|
||||
final String srcName = args[0];
|
||||
final String dstName = args[1];
|
||||
|
||||
/* Read the origin POIFS using the eventing API. The real work is done
|
||||
* in the class ModifySICopyTheRest which is registered here as a
|
||||
* POIFSReader. */
|
||||
final POIFSReader r = new POIFSReader();
|
||||
final ModifySICopyTheRest msrl = new ModifySICopyTheRest(dstName);
|
||||
r.registerListener(msrl);
|
||||
FileInputStream fis = new FileInputStream(srcName);
|
||||
r.read(fis);
|
||||
fis.close();
|
||||
|
||||
/* Write the new POIFS to disk. */
|
||||
msrl.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>This class does all the work. As its name implies it modifies a
|
||||
* summary information property set and copies everything else unmodified
|
||||
* to the destination POI filesystem. Since an instance of it is registered
|
||||
* as a {@link POIFSReader} its method {@link
|
||||
* #processPOIFSReaderEvent(POIFSReaderEvent)} is called for each document
|
||||
* in the origin POIFS.</p>
|
||||
*/
|
||||
static class ModifySICopyTheRest implements POIFSReaderListener
|
||||
{
|
||||
private String dstName;
|
||||
private OutputStream out;
|
||||
private POIFSFileSystem poiFs;
|
||||
|
||||
|
||||
/**
|
||||
* <p>The constructor of a {@link ModifySICopyTheRest} instance creates
|
||||
* the target POIFS. It also stores the name of the file the POIFS will
|
||||
* be written to once it is complete.</p>
|
||||
*
|
||||
* @param dstName The name of the disk file the destination POIFS is to
|
||||
* be written to.
|
||||
*/
|
||||
public ModifySICopyTheRest(final String dstName)
|
||||
{
|
||||
this.dstName = dstName;
|
||||
poiFs = new POIFSFileSystem();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>The method is called by POI's eventing API for each file in the
|
||||
* origin POIFS.</p>
|
||||
*/
|
||||
@Override
|
||||
public void processPOIFSReaderEvent(final POIFSReaderEvent event)
|
||||
{
|
||||
/* The following declarations are shortcuts for accessing the
|
||||
* "event" object. */
|
||||
final POIFSDocumentPath path = event.getPath();
|
||||
final String name = event.getName();
|
||||
final DocumentInputStream stream = event.getStream();
|
||||
|
||||
Throwable t = null;
|
||||
|
||||
try {
|
||||
/* Find out whether the current document is a property set
|
||||
* stream or not. */
|
||||
if (PropertySet.isPropertySetStream(stream)) {
|
||||
try {
|
||||
/* Yes, the current document is a property set stream.
|
||||
* Let's create a PropertySet instance from it. */
|
||||
PropertySet ps = PropertySetFactory.create(stream);
|
||||
|
||||
/* Now we know that we really have a property set. The next
|
||||
* step is to find out whether it is a summary information
|
||||
* or not. */
|
||||
if (ps.isSummaryInformation()) {
|
||||
/* Yes, it is a summary information. We will modify it
|
||||
* and write the result to the destination POIFS. */
|
||||
editSI(poiFs, path, name, ps);
|
||||
} else {
|
||||
/* No, it is not a summary information. We don't care
|
||||
* about its internals and copy it unmodified to the
|
||||
* destination POIFS. */
|
||||
copy(poiFs, path, name, ps);
|
||||
}
|
||||
} catch (NoPropertySetStreamException ex) {
|
||||
/* This exception will not be thrown because we already
|
||||
* checked above. */
|
||||
}
|
||||
} else {
|
||||
/* No, the current document is not a property set stream. We
|
||||
* copy it unmodified to the destination POIFS. */
|
||||
copy(poiFs, event.getPath(), event.getName(), stream);
|
||||
}
|
||||
} catch (MarkUnsupportedException ex) {
|
||||
t = ex;
|
||||
} catch (IOException ex) {
|
||||
t = ex;
|
||||
} catch (WritingNotSupportedException ex) {
|
||||
t = ex;
|
||||
}
|
||||
|
||||
/* According to the definition of the processPOIFSReaderEvent method
|
||||
* we cannot pass checked exceptions to the caller. The following
|
||||
* lines check whether a checked exception occured and throws an
|
||||
* unchecked exception. The message of that exception is that of
|
||||
* the underlying checked exception. */
|
||||
if (t != null) {
|
||||
throw new HPSFRuntimeException
|
||||
("Could not read file \"" + path + "/" + name +
|
||||
"\". Reason: " + Util.toString(t));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>Receives a summary information property set modifies (or creates)
|
||||
* its "author" and "title" properties and writes the result under the
|
||||
* same path and name as the origin to a destination POI filesystem.</p>
|
||||
*
|
||||
* @param poiFs The POI filesystem to write to.
|
||||
* @param path The original (and destination) stream's path.
|
||||
* @param name The original (and destination) stream's name.
|
||||
* @param si The property set. It should be a summary information
|
||||
* property set.
|
||||
* @throws IOException
|
||||
* @throws WritingNotSupportedException
|
||||
*/
|
||||
public void editSI(final POIFSFileSystem poiFs,
|
||||
final POIFSDocumentPath path,
|
||||
final String name,
|
||||
final PropertySet si)
|
||||
throws WritingNotSupportedException, IOException
|
||||
|
||||
{
|
||||
/* Get the directory entry for the target stream. */
|
||||
final DirectoryEntry de = getPath(poiFs, path);
|
||||
|
||||
/* Create a mutable property set as a copy of the original read-only
|
||||
* property set. */
|
||||
final MutablePropertySet mps = new MutablePropertySet(si);
|
||||
|
||||
/* Retrieve the section containing the properties to modify. A
|
||||
* summary information property set contains exactly one section. */
|
||||
final MutableSection s =
|
||||
(MutableSection) mps.getSections().get(0);
|
||||
|
||||
/* Set the properties. */
|
||||
s.setProperty(PropertyIDMap.PID_AUTHOR, Variant.VT_LPSTR,
|
||||
"Rainer Klute");
|
||||
s.setProperty(PropertyIDMap.PID_TITLE, Variant.VT_LPWSTR,
|
||||
"Test");
|
||||
|
||||
/* Create an input stream containing the bytes the property set
|
||||
* stream consists of. */
|
||||
final InputStream pss = mps.toInputStream();
|
||||
|
||||
/* Write the property set stream to the POIFS. */
|
||||
de.createDocument(name, pss);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>Writes a {@link PropertySet} to a POI filesystem. This method is
|
||||
* simpler than {@link #editSI} because the origin property set has just
|
||||
* to be copied.</p>
|
||||
*
|
||||
* @param poiFs The POI filesystem to write to.
|
||||
* @param path The file's path in the POI filesystem.
|
||||
* @param name The file's name in the POI filesystem.
|
||||
* @param ps The property set to write.
|
||||
* @throws WritingNotSupportedException
|
||||
* @throws IOException
|
||||
*/
|
||||
public void copy(final POIFSFileSystem poiFs,
|
||||
final POIFSDocumentPath path,
|
||||
final String name,
|
||||
final PropertySet ps)
|
||||
throws WritingNotSupportedException, IOException
|
||||
{
|
||||
final DirectoryEntry de = getPath(poiFs, path);
|
||||
final MutablePropertySet mps = new MutablePropertySet(ps);
|
||||
de.createDocument(name, mps.toInputStream());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>Copies the bytes from a {@link DocumentInputStream} to a new
|
||||
* stream in a POI filesystem.</p>
|
||||
*
|
||||
* @param poiFs The POI filesystem to write to.
|
||||
* @param path The source document's path.
|
||||
* @param name The source document's name.
|
||||
* @param stream The stream containing the source document.
|
||||
* @throws IOException
|
||||
*/
|
||||
public void copy(final POIFSFileSystem poiFs,
|
||||
final POIFSDocumentPath path,
|
||||
final String name,
|
||||
final DocumentInputStream stream) throws IOException
|
||||
{
|
||||
final DirectoryEntry de = getPath(poiFs, path);
|
||||
final ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
int c;
|
||||
while ((c = stream.read()) != -1)
|
||||
out.write(c);
|
||||
stream.close();
|
||||
out.close();
|
||||
final InputStream in =
|
||||
new ByteArrayInputStream(out.toByteArray());
|
||||
de.createDocument(name, in);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>Writes the POI file system to a disk file.</p>
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @throws IOException
|
||||
*/
|
||||
public void close() throws FileNotFoundException, IOException
|
||||
{
|
||||
out = new FileOutputStream(dstName);
|
||||
poiFs.writeFilesystem(out);
|
||||
out.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Contains the directory paths that have already been created in the
|
||||
* output POI filesystem and maps them to their corresponding
|
||||
* {@link org.apache.poi.poifs.filesystem.DirectoryNode}s. */
|
||||
private final Map<String, DirectoryEntry> paths = new HashMap<String, DirectoryEntry>();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* <p>Ensures that the directory hierarchy for a document in a POI
|
||||
* fileystem is in place. When a document is to be created somewhere in
|
||||
* a POI filesystem its directory must be created first. This method
|
||||
* creates all directories between the POI filesystem root and the
|
||||
* directory the document should belong to which do not yet exist.</p>
|
||||
*
|
||||
* <p>Unfortunately POI does not offer a simple method to interrogate
|
||||
* the POIFS whether a certain child node (file or directory) exists in
|
||||
* a directory. However, since we always start with an empty POIFS which
|
||||
* contains the root directory only and since each directory in the
|
||||
* POIFS is created by this method we can maintain the POIFS's directory
|
||||
* hierarchy ourselves: The {@link DirectoryEntry} of each directory
|
||||
* created is stored in a {@link Map}. The directories' path names map
|
||||
* to the corresponding {@link DirectoryEntry} instances.</p>
|
||||
*
|
||||
* @param poiFs The POI filesystem the directory hierarchy is created
|
||||
* in, if needed.
|
||||
* @param path The document's path. This method creates those directory
|
||||
* components of this hierarchy which do not yet exist.
|
||||
* @return The directory entry of the document path's parent. The caller
|
||||
* should use this {@link DirectoryEntry} to create documents in it.
|
||||
*/
|
||||
public DirectoryEntry getPath(final POIFSFileSystem poiFs,
|
||||
final POIFSDocumentPath path)
|
||||
{
|
||||
try
|
||||
{
|
||||
/* Check whether this directory has already been created. */
|
||||
final String s = path.toString();
|
||||
DirectoryEntry de = paths.get(s);
|
||||
if (de != null)
|
||||
/* Yes: return the corresponding DirectoryEntry. */
|
||||
return de;
|
||||
|
||||
/* No: We have to create the directory - or return the root's
|
||||
* DirectoryEntry. */
|
||||
int l = path.length();
|
||||
if (l == 0)
|
||||
/* Get the root directory. It does not have to be created
|
||||
* since it always exists in a POIFS. */
|
||||
de = poiFs.getRoot();
|
||||
else
|
||||
{
|
||||
/* Create a subordinate directory. The first step is to
|
||||
* ensure that the parent directory exists: */
|
||||
de = getPath(poiFs, path.getParent());
|
||||
/* Now create the target directory: */
|
||||
de = de.createDirectory(path.getComponent
|
||||
(path.length() - 1));
|
||||
}
|
||||
paths.put(s, de);
|
||||
return de;
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
/* This exception will be thrown if the directory already
|
||||
* exists. However, since we have full control about directory
|
||||
* creation we can ensure that this will never happen. */
|
||||
ex.printStackTrace(System.err);
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,106 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hpsf.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.apache.poi.hpsf.MutableProperty;
|
||||
import org.apache.poi.hpsf.MutablePropertySet;
|
||||
import org.apache.poi.hpsf.MutableSection;
|
||||
import org.apache.poi.hpsf.SummaryInformation;
|
||||
import org.apache.poi.hpsf.Variant;
|
||||
import org.apache.poi.hpsf.WritingNotSupportedException;
|
||||
import org.apache.poi.hpsf.wellknown.PropertyIDMap;
|
||||
import org.apache.poi.hpsf.wellknown.SectionIDMap;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
|
||||
/**
|
||||
* <p>This class is a simple sample application showing how to create a property
|
||||
* set and write it to disk.</p>
|
||||
*/
|
||||
public class WriteTitle
|
||||
{
|
||||
/**
|
||||
* <p>Runs the example program.</p>
|
||||
*
|
||||
* @param args Command-line arguments. The first and only command-line
|
||||
* argument is the name of the POI file system to create.
|
||||
* @throws IOException if any I/O exception occurs.
|
||||
* @throws WritingNotSupportedException if HPSF does not (yet) support
|
||||
* writing a certain property type.
|
||||
*/
|
||||
public static void main(final String[] args)
|
||||
throws WritingNotSupportedException, IOException
|
||||
{
|
||||
/* Check whether we have exactly one command-line argument. */
|
||||
if (args.length != 1)
|
||||
{
|
||||
System.err.println("Usage: " + WriteTitle.class.getName() +
|
||||
"destinationPOIFS");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
final String fileName = args[0];
|
||||
|
||||
/* Create a mutable property set. Initially it contains a single section
|
||||
* with no properties. */
|
||||
final MutablePropertySet mps = new MutablePropertySet();
|
||||
|
||||
/* Retrieve the section the property set already contains. */
|
||||
final MutableSection ms = (MutableSection) mps.getSections().get(0);
|
||||
|
||||
/* Turn the property set into a summary information property. This is
|
||||
* done by setting the format ID of its first section to
|
||||
* SectionIDMap.SUMMARY_INFORMATION_ID. */
|
||||
ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);
|
||||
|
||||
/* Create an empty property. */
|
||||
final MutableProperty p = new MutableProperty();
|
||||
|
||||
/* Fill the property with appropriate settings so that it specifies the
|
||||
* document's title. */
|
||||
p.setID(PropertyIDMap.PID_TITLE);
|
||||
p.setType(Variant.VT_LPWSTR);
|
||||
p.setValue("Sample title");
|
||||
|
||||
/* Place the property into the section. */
|
||||
ms.setProperty(p);
|
||||
|
||||
/* Create the POI file system the property set is to be written to. */
|
||||
final POIFSFileSystem poiFs = new POIFSFileSystem();
|
||||
|
||||
/* For writing the property set into a POI file system it has to be
|
||||
* handed over to the POIFS.createDocument() method as an input stream
|
||||
* which produces the bytes making out the property set stream. */
|
||||
final InputStream is = mps.toInputStream();
|
||||
|
||||
/* Create the summary information property set in the POI file
|
||||
* system. It is given the default name most (if not all) summary
|
||||
* information property sets have. */
|
||||
poiFs.createDocument(is, SummaryInformation.DEFAULT_STREAM_NAME);
|
||||
|
||||
/* Write the whole POI file system to a disk file. */
|
||||
FileOutputStream fos = new FileOutputStream(fileName);
|
||||
poiFs.writeFilesystem(fos);
|
||||
fos.close();
|
||||
poiFs.close();
|
||||
}
|
||||
|
||||
}
|
@ -1,456 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.sl.draw.DrawTableShape;
|
||||
import org.apache.poi.sl.draw.SLGraphics;
|
||||
import org.apache.poi.sl.usermodel.AutoShape;
|
||||
import org.apache.poi.sl.usermodel.GroupShape;
|
||||
import org.apache.poi.sl.usermodel.ShapeType;
|
||||
import org.apache.poi.sl.usermodel.Slide;
|
||||
import org.apache.poi.sl.usermodel.SlideShow;
|
||||
import org.apache.poi.sl.usermodel.TableCell;
|
||||
import org.apache.poi.sl.usermodel.TableShape;
|
||||
import org.apache.poi.sl.usermodel.TextBox;
|
||||
import org.apache.poi.sl.usermodel.TextParagraph;
|
||||
import org.apache.poi.sl.usermodel.TextRun;
|
||||
import org.apache.poi.sl.usermodel.TextShape.TextPlaceholder;
|
||||
import org.apache.poi.sl.usermodel.VerticalAlignment;
|
||||
|
||||
/**
|
||||
* Presentation for Fast Feather Track on ApacheconEU 2008
|
||||
*
|
||||
* @author Yegor Kozlov
|
||||
*/
|
||||
public final class ApacheconEU08 {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
SlideShow<?,?> ppt = new HSLFSlideShow();
|
||||
// SlideShow<?,?> ppt = new XMLSlideShow();
|
||||
ppt.setPageSize(new Dimension(720, 540));
|
||||
|
||||
slide1(ppt);
|
||||
slide2(ppt);
|
||||
slide3(ppt);
|
||||
slide4(ppt);
|
||||
slide5(ppt);
|
||||
slide6(ppt);
|
||||
slide7(ppt);
|
||||
slide8(ppt);
|
||||
slide9(ppt);
|
||||
slide10(ppt);
|
||||
slide11(ppt);
|
||||
slide12(ppt);
|
||||
|
||||
String ext = ppt.getClass().getName().contains("HSLF") ? "ppt" : "pptx";
|
||||
FileOutputStream out = new FileOutputStream("apachecon_eu_08."+ext);
|
||||
ppt.write(out);
|
||||
out.close();
|
||||
ppt.close();
|
||||
}
|
||||
|
||||
public static void slide1(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.CENTER_TITLE);
|
||||
box1.setText("POI-HSLF");
|
||||
box1.setAnchor(new Rectangle(54, 78, 612, 115));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.setTextPlaceholder(TextPlaceholder.CENTER_BODY);
|
||||
box2.setText("Java API To Access Microsoft PowerPoint Format Files");
|
||||
box2.setAnchor(new Rectangle(108, 204, 504, 138));
|
||||
|
||||
TextBox<?,?> box3 = slide.createTextBox();
|
||||
box3.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(32d);
|
||||
box3.setText(
|
||||
"Yegor Kozlov\r" +
|
||||
"yegor - apache - org");
|
||||
box3.setHorizontalCentered(true);
|
||||
box3.setAnchor(new Rectangle(206, 348, 310, 84));
|
||||
}
|
||||
|
||||
public static void slide2(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.TITLE);
|
||||
box1.setText("What is HSLF?");
|
||||
box1.setAnchor(new Rectangle(36, 21, 648, 90));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.setTextPlaceholder(TextPlaceholder.BODY);
|
||||
box2.setText("HorribleSLideshowFormat is the POI Project's pure Java implementation " +
|
||||
"of the Powerpoint binary file format. \r" +
|
||||
"POI sub-project since 2005\r" +
|
||||
"Started by Nick Burch, Yegor Kozlov joined soon after");
|
||||
box2.setAnchor(new Rectangle(36, 126, 648, 356));
|
||||
}
|
||||
|
||||
public static void slide3(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.TITLE);
|
||||
box1.setText("HSLF in a Nutshell");
|
||||
box1.setAnchor(new Rectangle(36, 15, 648, 65));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.setTextPlaceholder(TextPlaceholder.BODY);
|
||||
box2.setText(
|
||||
"HSLF provides a way to read, create and modify MS PowerPoint presentations\r" +
|
||||
"Pure Java API - you don't need PowerPoint to read and write *.ppt files\r" +
|
||||
"Comprehensive support of PowerPoint objects\r" +
|
||||
"Rich text\r" +
|
||||
"Tables\r" +
|
||||
"Shapes\r" +
|
||||
"Pictures\r" +
|
||||
"Master slides\r" +
|
||||
"Access to low level data structures"
|
||||
);
|
||||
|
||||
List<? extends TextParagraph<?,?,?>> tp = box2.getTextParagraphs();
|
||||
for (int i : new byte[]{0,1,2,8}) {
|
||||
tp.get(i).getTextRuns().get(0).setFontSize(28d);
|
||||
}
|
||||
for (int i : new byte[]{3,4,5,6,7}) {
|
||||
tp.get(i).getTextRuns().get(0).setFontSize(24d);
|
||||
tp.get(i).setIndentLevel(1);
|
||||
}
|
||||
box2.setAnchor(new Rectangle(36, 80, 648, 400));
|
||||
}
|
||||
|
||||
public static void slide4(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
String[][] txt1 = {
|
||||
{"Note"},
|
||||
{"This presentation was created programmatically using POI HSLF"}
|
||||
};
|
||||
TableShape<?,?> table1 = slide.createTable(2, 1);
|
||||
for (int i = 0; i < txt1.length; i++) {
|
||||
for (int j = 0; j < txt1[i].length; j++) {
|
||||
TableCell<?,?> cell = table1.getCell(i, j);
|
||||
cell.setText(txt1[i][j]);
|
||||
TextRun rt = cell.getTextParagraphs().get(0).getTextRuns().get(0);
|
||||
rt.setFontSize(10d);
|
||||
rt.setFontFamily("Arial");
|
||||
rt.setBold(true);
|
||||
if(i == 0){
|
||||
rt.setFontSize(32d);
|
||||
rt.setFontColor(Color.white);
|
||||
cell.setFillColor(new Color(0, 153, 204));
|
||||
} else {
|
||||
rt.setFontSize(28d);
|
||||
cell.setFillColor(new Color(235, 239, 241));
|
||||
}
|
||||
cell.setVerticalAlignment(VerticalAlignment.MIDDLE);
|
||||
}
|
||||
}
|
||||
|
||||
DrawTableShape dts = new DrawTableShape(table1);
|
||||
dts.setAllBorders(1.0, Color.black);
|
||||
dts.setOutsideBorders(4.0);
|
||||
|
||||
table1.setColumnWidth(0, 450);
|
||||
table1.setRowHeight(0, 50);
|
||||
table1.setRowHeight(1, 80);
|
||||
|
||||
Dimension dim = ppt.getPageSize();
|
||||
Rectangle2D oldAnchor = table1.getAnchor();
|
||||
table1.setAnchor(new Rectangle2D.Double((dim.width-450)/2d, 100, oldAnchor.getWidth(), oldAnchor.getHeight()));
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setHorizontalCentered(true);
|
||||
box1.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(24d);
|
||||
box1.setText("The source code is available at\r" +
|
||||
"http://people.apache.org/~yegor/apachecon_eu08/");
|
||||
box1.setAnchor(new Rectangle(80, 356, 553, 65));
|
||||
}
|
||||
|
||||
public static void slide5(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.TITLE);
|
||||
box1.setText("HSLF in Action - 1\rData Extraction");
|
||||
box1.setAnchor(new Rectangle(36, 21, 648, 100));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.setTextPlaceholder(TextPlaceholder.BODY);
|
||||
box2.setText(
|
||||
"Text from slides and notes\r" +
|
||||
"Images\r" +
|
||||
"Shapes and their properties (type, position in the slide, color, font, etc.)");
|
||||
box2.setAnchor(new Rectangle(36, 150, 648, 300));
|
||||
}
|
||||
|
||||
public static void slide6(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.TITLE);
|
||||
box1.setText("HSLF in Action - 2");
|
||||
box1.setAnchor(new Rectangle(36, 20, 648, 90));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(18d);
|
||||
box2.setText("Creating a simple presentation from scratch");
|
||||
box2.setAnchor(new Rectangle(170, 100, 364, 30));
|
||||
|
||||
TextBox<?,?> box3 = slide.createTextBox();
|
||||
TextRun rt3 = box3.getTextParagraphs().get(0).getTextRuns().get(0);
|
||||
rt3.setFontFamily("Courier New");
|
||||
rt3.setFontSize(8d);
|
||||
box3.setText(
|
||||
"SlideShow ppt = new SlideShow();\u000b" +
|
||||
"Slide slide = ppt.createSlide();\u000b" +
|
||||
"\u000b" +
|
||||
"TextBox box2 = new TextBox();\u000b" +
|
||||
"box2.setHorizontalAlignment(TextBox.AlignCenter);\u000b" +
|
||||
"box2.setVerticalAlignment(TextBox.AnchorMiddle);\u000b" +
|
||||
"box2.getTextRun().setText(\"Java Code\");\u000b" +
|
||||
"box2.getFill().setForegroundColor(new Color(187, 224, 227));\u000b" +
|
||||
"box2.setLineColor(Color.black);\u000b" +
|
||||
"box2.setLineWidth(0.75);\u000b" +
|
||||
"box2.setAnchor(new Rectangle(66, 243, 170, 170));\u000b" +
|
||||
"slide.addShape(box2);\u000b" +
|
||||
"\u000b" +
|
||||
"TextBox box3 = new TextBox();\u000b" +
|
||||
"box3.setHorizontalAlignment(TextBox.AlignCenter);\u000b" +
|
||||
"box3.setVerticalAlignment(TextBox.AnchorMiddle);\u000b" +
|
||||
"box3.getTextRun().setText(\"*.ppt file\");\u000b" +
|
||||
"box3.setLineWidth(0.75);\u000b" +
|
||||
"box3.setLineColor(Color.black);\u000b" +
|
||||
"box3.getFill().setForegroundColor(new Color(187, 224, 227));\u000b" +
|
||||
"box3.setAnchor(new Rectangle(473, 243, 170, 170));\u000b" +
|
||||
"slide.addShape(box3);\u000b" +
|
||||
"\u000b" +
|
||||
"AutoShape box4 = new AutoShape(ShapeTypes.Arrow);\u000b" +
|
||||
"box4.getFill().setForegroundColor(new Color(187, 224, 227));\u000b" +
|
||||
"box4.setLineWidth(0.75);\u000b" +
|
||||
"box4.setLineColor(Color.black);\u000b" +
|
||||
"box4.setAnchor(new Rectangle(253, 288, 198, 85));\u000b" +
|
||||
"slide.addShape(box4);\u000b" +
|
||||
"\u000b" +
|
||||
"FileOutputStream out = new FileOutputStream(\"hslf-demo.ppt\");\u000b" +
|
||||
"ppt.write(out);\u000b" +
|
||||
"out.close();");
|
||||
box3.setAnchor(new Rectangle(30, 150, 618, 411));
|
||||
box3.setHorizontalCentered(true);
|
||||
}
|
||||
|
||||
public static void slide7(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.setHorizontalCentered(true);
|
||||
box2.setVerticalAlignment(VerticalAlignment.MIDDLE);
|
||||
box2.setText("Java Code");
|
||||
box2.setFillColor(new Color(187, 224, 227));
|
||||
box2.setStrokeStyle(0.75, Color.black);
|
||||
box2.setAnchor(new Rectangle(66, 243, 170, 170));
|
||||
|
||||
TextBox<?,?> box3 = slide.createTextBox();
|
||||
box3.setHorizontalCentered(true);
|
||||
box3.setVerticalAlignment(VerticalAlignment.MIDDLE);
|
||||
box3.setText("*.ppt file");
|
||||
box3.setFillColor(new Color(187, 224, 227));
|
||||
box3.setStrokeStyle(0.75, Color.black);
|
||||
box3.setAnchor(new Rectangle(473, 243, 170, 170));
|
||||
|
||||
AutoShape<?,?> box4 = slide.createAutoShape();
|
||||
box4.setShapeType(ShapeType.RIGHT_ARROW);
|
||||
box4.setFillColor(new Color(187, 224, 227));
|
||||
box4.setStrokeStyle(0.75, Color.black);
|
||||
box4.setAnchor(new Rectangle(253, 288, 198, 85));
|
||||
}
|
||||
|
||||
public static void slide8(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.TITLE);
|
||||
box1.setText("Wait, there is more!");
|
||||
box1.setAnchor(new Rectangle(36, 21, 648, 90));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.setTextPlaceholder(TextPlaceholder.BODY);
|
||||
box2.setText(
|
||||
"Rich text\r" +
|
||||
"Tables\r" +
|
||||
"Pictures (JPEG, PNG, BMP, WMF, PICT)\r" +
|
||||
"Comprehensive formatting features");
|
||||
box2.setAnchor(new Rectangle(36, 126, 648, 356));
|
||||
}
|
||||
|
||||
public static void slide9(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.TITLE);
|
||||
box1.setText("HSLF in Action - 3");
|
||||
box1.setAnchor(new Rectangle(36, 20, 648, 50));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(18d);
|
||||
box2.setText("PPGraphics2D: PowerPoint Graphics2D driver");
|
||||
box2.setAnchor(new Rectangle(178, 70, 387, 30));
|
||||
|
||||
TextBox<?,?> box3 = slide.createTextBox();
|
||||
TextRun rt3 = box3.getTextParagraphs().get(0).getTextRuns().get(0);
|
||||
rt3.setFontFamily("Courier New");
|
||||
rt3.setFontSize(8d);
|
||||
box3.setText(
|
||||
"//bar chart data. The first value is the bar color, the second is the width\u000b" +
|
||||
"Object[] def = new Object[]{\u000b" +
|
||||
" Color.yellow, new Integer(100),\u000b" +
|
||||
" Color.green, new Integer(150),\u000b" +
|
||||
" Color.gray, new Integer(75),\u000b" +
|
||||
" Color.red, new Integer(200),\u000b" +
|
||||
"};\u000b" +
|
||||
"\u000b" +
|
||||
"SlideShow ppt = new SlideShow();\u000b" +
|
||||
"Slide slide = ppt.createSlide();\u000b" +
|
||||
"\u000b" +
|
||||
"ShapeGroup group = new ShapeGroup();\u000b" +
|
||||
"//define position of the drawing in the slide\u000b" +
|
||||
"Rectangle bounds = new java.awt.Rectangle(200, 100, 350, 300);\u000b" +
|
||||
"group.setAnchor(bounds);\u000b" +
|
||||
"slide.addShape(group);\u000b" +
|
||||
"Graphics2D graphics = new PPGraphics2D(group);\u000b" +
|
||||
"\u000b" +
|
||||
"//draw a simple bar graph\u000b" +
|
||||
"int x = bounds.x + 50, y = bounds.y + 50;\u000b" +
|
||||
"graphics.setFont(new Font(\"Arial\", Font.BOLD, 10));\u000b" +
|
||||
"for (int i = 0, idx = 1; i < def.length; i+=2, idx++) {\u000b" +
|
||||
" graphics.setColor(Color.black);\u000b" +
|
||||
" int width = ((Integer)def[i+1]).intValue();\u000b" +
|
||||
" graphics.drawString(\"Q\" + idx, x-20, y+20);\u000b" +
|
||||
" graphics.drawString(width + \"%\", x + width + 10, y + 20);\u000b" +
|
||||
" graphics.setColor((Color)def[i]);\u000b" +
|
||||
" graphics.fill(new Rectangle(x, y, width, 30));\u000b" +
|
||||
" y += 40;\u000b" +
|
||||
"}\u000b" +
|
||||
"graphics.setColor(Color.black);\u000b" +
|
||||
"graphics.setFont(new Font(\"Arial\", Font.BOLD, 14));\u000b" +
|
||||
"graphics.draw(bounds);\u000b" +
|
||||
"graphics.drawString(\"Performance\", x + 70, y + 40);\u000b" +
|
||||
"\u000b" +
|
||||
"FileOutputStream out = new FileOutputStream(\"hslf-demo.ppt\");\u000b" +
|
||||
"ppt.write(out);\u000b" +
|
||||
"out.close();");
|
||||
box3.setAnchor(new Rectangle(96, 110, 499, 378));
|
||||
box3.setHorizontalCentered(true);
|
||||
}
|
||||
|
||||
public static void slide10(SlideShow<?,?> ppt) throws IOException {
|
||||
//bar chart data. The first value is the bar color, the second is the width
|
||||
Object[] def = new Object[]{
|
||||
Color.yellow, 100,
|
||||
Color.green, 150,
|
||||
Color.gray, 75,
|
||||
Color.red, 200,
|
||||
};
|
||||
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
GroupShape<?,?> group = slide.createGroup();
|
||||
//define position of the drawing in the slide
|
||||
Rectangle bounds = new java.awt.Rectangle(200, 100, 350, 300);
|
||||
group.setAnchor(bounds);
|
||||
Graphics2D graphics = new SLGraphics(group);
|
||||
|
||||
//draw a simple bar graph
|
||||
int x = bounds.x + 50, y = bounds.y + 50;
|
||||
graphics.setFont(new Font("Arial", Font.BOLD, 10));
|
||||
for (int i = 0, idx = 1; i < def.length; i+=2, idx++) {
|
||||
graphics.setColor(Color.black);
|
||||
int width = ((Integer)def[i+1]).intValue();
|
||||
graphics.drawString("Q" + idx, x-20, y+20);
|
||||
graphics.drawString(width + "%", x + width + 10, y + 20);
|
||||
graphics.setColor((Color)def[i]);
|
||||
graphics.fill(new Rectangle(x, y, width, 30));
|
||||
y += 40;
|
||||
}
|
||||
graphics.setColor(Color.black);
|
||||
graphics.setFont(new Font("Arial", Font.BOLD, 14));
|
||||
graphics.draw(bounds);
|
||||
graphics.drawString("Performance", x + 70, y + 40);
|
||||
|
||||
}
|
||||
|
||||
public static void slide11(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.TITLE);
|
||||
box1.setText("HSLF Development Plans");
|
||||
box1.setAnchor(new Rectangle(36, 21, 648, 90));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.setTextPlaceholder(TextPlaceholder.BODY);
|
||||
box2.setText(
|
||||
"Support for more PowerPoint functionality\r" +
|
||||
"Rendering slides into java.awt.Graphics2D\r" +
|
||||
"A way to export slides into images or other formats\r" +
|
||||
"Integration with Apache FOP - Formatting Objects Processor\r" +
|
||||
"Transformation of XSL-FO into PPT\r" +
|
||||
"PPT2PDF transcoder"
|
||||
);
|
||||
|
||||
List<? extends TextParagraph<?,?,?>> tp = box2.getTextParagraphs();
|
||||
for (int i : new byte[]{0,1,3}) {
|
||||
tp.get(i).getTextRuns().get(0).setFontSize(28d);
|
||||
}
|
||||
for (int i : new byte[]{2,4,5}) {
|
||||
tp.get(i).getTextRuns().get(0).setFontSize(24d);
|
||||
tp.get(i).setIndentLevel(1);
|
||||
}
|
||||
|
||||
box2.setAnchor(new Rectangle(36, 126, 648, 400));
|
||||
}
|
||||
|
||||
public static void slide12(SlideShow<?,?> ppt) throws IOException {
|
||||
Slide<?,?> slide = ppt.createSlide();
|
||||
|
||||
TextBox<?,?> box1 = slide.createTextBox();
|
||||
box1.setTextPlaceholder(TextPlaceholder.CENTER_TITLE);
|
||||
box1.setText("Questions?");
|
||||
box1.setAnchor(new Rectangle(54, 167, 612, 115));
|
||||
|
||||
TextBox<?,?> box2 = slide.createTextBox();
|
||||
box2.setTextPlaceholder(TextPlaceholder.CENTER_BODY);
|
||||
box2.setText(
|
||||
"http://poi.apache.org/hslf/\r" +
|
||||
"http://people.apache.org/~yegor");
|
||||
box2.setAnchor(new Rectangle(108, 306, 504, 138));
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlide;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.hslf.usermodel.HSLFTextBox;
|
||||
import org.apache.poi.hslf.usermodel.HSLFTextParagraph;
|
||||
|
||||
/**
|
||||
* How to create a single-level bulleted list
|
||||
* and change some of the bullet attributes
|
||||
*/
|
||||
public final class BulletsDemo {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
|
||||
HSLFSlideShow ppt = new HSLFSlideShow();
|
||||
|
||||
HSLFSlide slide = ppt.createSlide();
|
||||
|
||||
HSLFTextBox shape = new HSLFTextBox();
|
||||
HSLFTextParagraph rt = shape.getTextParagraphs().get(0);
|
||||
rt.getTextRuns().get(0).setFontSize(42d);
|
||||
rt.setBullet(true);
|
||||
rt.setIndent(0d); //bullet offset
|
||||
rt.setLeftMargin(50d); //text offset (should be greater than bullet offset)
|
||||
rt.setBulletChar('\u263A'); //bullet character
|
||||
shape.setText(
|
||||
"January\r" +
|
||||
"February\r" +
|
||||
"March\r" +
|
||||
"April");
|
||||
slide.addShape(shape);
|
||||
|
||||
shape.setAnchor(new java.awt.Rectangle(50, 50, 500, 300)); //position of the text box in the slide
|
||||
slide.addShape(shape);
|
||||
|
||||
FileOutputStream out = new FileOutputStream("bullets.ppt");
|
||||
ppt.write(out);
|
||||
out.close();
|
||||
|
||||
ppt.close();
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.awt.Rectangle;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hslf.usermodel.HSLFHyperlink;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlide;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.hslf.usermodel.HSLFTextBox;
|
||||
|
||||
/**
|
||||
* Demonstrates how to create hyperlinks in PowerPoint presentations
|
||||
*/
|
||||
public abstract class CreateHyperlink {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSLFSlideShow ppt = new HSLFSlideShow();
|
||||
|
||||
HSLFSlide slideA = ppt.createSlide();
|
||||
ppt.createSlide();
|
||||
HSLFSlide slideC = ppt.createSlide();
|
||||
|
||||
// link to a URL
|
||||
HSLFTextBox textBox1 = slideA.createTextBox();
|
||||
textBox1.setText("Apache POI");
|
||||
textBox1.setAnchor(new Rectangle(100, 100, 200, 50));
|
||||
|
||||
HSLFHyperlink link1 = textBox1.getTextParagraphs().get(0).getTextRuns().get(0).createHyperlink();
|
||||
link1.linkToUrl("http://www.apache.org");
|
||||
link1.setLabel(textBox1.getText());
|
||||
|
||||
// link to another slide
|
||||
HSLFTextBox textBox2 = slideA.createTextBox();
|
||||
textBox2.setText("Go to slide #3");
|
||||
textBox2.setAnchor(new Rectangle(100, 300, 200, 50));
|
||||
|
||||
HSLFHyperlink link2 = textBox2.getTextParagraphs().get(0).getTextRuns().get(0).createHyperlink();
|
||||
link2.linkToSlide(slideC);
|
||||
|
||||
FileOutputStream out = new FileOutputStream("hyperlink.ppt");
|
||||
ppt.write(out);
|
||||
out.close();
|
||||
|
||||
ppt.close();
|
||||
}
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.apache.poi.hslf.model.OLEShape;
|
||||
import org.apache.poi.hslf.usermodel.HSLFObjectData;
|
||||
import org.apache.poi.hslf.usermodel.HSLFPictureData;
|
||||
import org.apache.poi.hslf.usermodel.HSLFPictureShape;
|
||||
import org.apache.poi.hslf.usermodel.HSLFShape;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlide;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSoundData;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hwpf.HWPFDocument;
|
||||
import org.apache.poi.hwpf.usermodel.Paragraph;
|
||||
import org.apache.poi.hwpf.usermodel.Range;
|
||||
|
||||
/**
|
||||
* Demonstrates how you can extract misc embedded data from a ppt file
|
||||
*/
|
||||
public final class DataExtraction {
|
||||
|
||||
public static void main(String args[]) throws Exception {
|
||||
|
||||
if (args.length == 0) {
|
||||
usage();
|
||||
return;
|
||||
}
|
||||
|
||||
FileInputStream is = new FileInputStream(args[0]);
|
||||
HSLFSlideShow ppt = new HSLFSlideShow(is);
|
||||
is.close();
|
||||
|
||||
//extract all sound files embedded in this presentation
|
||||
HSLFSoundData[] sound = ppt.getSoundData();
|
||||
for (int i = 0; i < sound.length; i++) {
|
||||
String type = sound[i].getSoundType(); //*.wav
|
||||
String name = sound[i].getSoundName(); //typically file name
|
||||
byte[] data = sound[i].getData(); //raw bytes
|
||||
|
||||
//save the sound on disk
|
||||
FileOutputStream out = new FileOutputStream(name + type);
|
||||
out.write(data);
|
||||
out.close();
|
||||
}
|
||||
|
||||
int oleIdx=-1, picIdx=-1;
|
||||
for (HSLFSlide slide : ppt.getSlides()) {
|
||||
//extract embedded OLE documents
|
||||
for (HSLFShape shape : slide.getShapes()) {
|
||||
if (shape instanceof OLEShape) {
|
||||
oleIdx++;
|
||||
OLEShape ole = (OLEShape) shape;
|
||||
HSLFObjectData data = ole.getObjectData();
|
||||
String name = ole.getInstanceName();
|
||||
if ("Worksheet".equals(name)) {
|
||||
|
||||
//read xls
|
||||
@SuppressWarnings({ "unused", "resource" })
|
||||
HSSFWorkbook wb = new HSSFWorkbook(data.getData());
|
||||
|
||||
} else if ("Document".equals(name)) {
|
||||
HWPFDocument doc = new HWPFDocument(data.getData());
|
||||
//read the word document
|
||||
Range r = doc.getRange();
|
||||
for(int k = 0; k < r.numParagraphs(); k++) {
|
||||
Paragraph p = r.getParagraph(k);
|
||||
System.out.println(p.text());
|
||||
}
|
||||
|
||||
//save on disk
|
||||
FileOutputStream out = new FileOutputStream(name + "-("+(oleIdx)+").doc");
|
||||
doc.write(out);
|
||||
out.close();
|
||||
doc.close();
|
||||
} else {
|
||||
FileOutputStream out = new FileOutputStream(ole.getProgID() + "-"+(oleIdx+1)+".dat");
|
||||
InputStream dis = data.getData();
|
||||
byte[] chunk = new byte[2048];
|
||||
int count;
|
||||
while ((count = dis.read(chunk)) >= 0) {
|
||||
out.write(chunk,0,count);
|
||||
}
|
||||
is.close();
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
|
||||
//Pictures
|
||||
else if (shape instanceof HSLFPictureShape) {
|
||||
picIdx++;
|
||||
HSLFPictureShape p = (HSLFPictureShape) shape;
|
||||
HSLFPictureData data = p.getPictureData();
|
||||
String ext = data.getType().extension;
|
||||
FileOutputStream out = new FileOutputStream("pict-" + picIdx + ext);
|
||||
out.write(data.getData());
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
ppt.close();
|
||||
}
|
||||
|
||||
private static void usage(){
|
||||
System.out.println("Usage: DataExtraction ppt");
|
||||
}
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.io.FileOutputStream;
|
||||
|
||||
import org.apache.poi.hslf.model.PPGraphics2D;
|
||||
import org.apache.poi.hslf.usermodel.HSLFGroupShape;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlide;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
|
||||
/**
|
||||
* Demonstrates how to draw into a slide using the HSLF Graphics2D driver.
|
||||
*
|
||||
* @author Yegor Kozlov
|
||||
*/
|
||||
public final class Graphics2DDemo {
|
||||
|
||||
/**
|
||||
* A simple bar chart demo
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
HSLFSlideShow ppt = new HSLFSlideShow();
|
||||
|
||||
//bar chart data. The first value is the bar color, the second is the width
|
||||
Object[] def = new Object[]{
|
||||
Color.yellow, 40,
|
||||
Color.green, 60,
|
||||
Color.gray, 30,
|
||||
Color.red, 80,
|
||||
};
|
||||
|
||||
HSLFSlide slide = ppt.createSlide();
|
||||
|
||||
HSLFGroupShape group = new HSLFGroupShape();
|
||||
//define position of the drawing in the slide
|
||||
Rectangle bounds = new java.awt.Rectangle(200, 100, 350, 300);
|
||||
group.setAnchor(bounds);
|
||||
group.setInteriorAnchor(new java.awt.Rectangle(0, 0, 100, 100));
|
||||
slide.addShape(group);
|
||||
Graphics2D graphics = new PPGraphics2D(group);
|
||||
|
||||
//draw a simple bar graph
|
||||
int x = 10, y = 10;
|
||||
graphics.setFont(new Font("Arial", Font.BOLD, 10));
|
||||
for (int i = 0, idx = 1; i < def.length; i+=2, idx++) {
|
||||
graphics.setColor(Color.black);
|
||||
int width = ((Integer)def[i+1]).intValue();
|
||||
graphics.drawString("Q" + idx, x-5, y+10);
|
||||
graphics.drawString(width + "%", x + width+3, y + 10);
|
||||
graphics.setColor((Color)def[i]);
|
||||
graphics.fill(new Rectangle(x, y, width, 10));
|
||||
y += 15;
|
||||
}
|
||||
graphics.setColor(Color.black);
|
||||
graphics.setFont(new Font("Arial", Font.BOLD, 14));
|
||||
graphics.draw(group.getInteriorAnchor());
|
||||
graphics.drawString("Performance", x + 30, y + 10);
|
||||
|
||||
FileOutputStream out = new FileOutputStream("hslf-graphics.ppt");
|
||||
ppt.write(out);
|
||||
out.close();
|
||||
|
||||
ppt.close();
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hslf.model.HeadersFooters;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
|
||||
/**
|
||||
* Demonstrates how to set headers / footers
|
||||
*/
|
||||
public abstract class HeadersFootersDemo {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSLFSlideShow ppt = new HSLFSlideShow();
|
||||
|
||||
HeadersFooters slideHeaders = ppt.getSlideHeadersFooters();
|
||||
slideHeaders.setFootersText("Created by POI-HSLF");
|
||||
slideHeaders.setSlideNumberVisible(true);
|
||||
slideHeaders.setDateTimeText("custom date time");
|
||||
|
||||
HeadersFooters notesHeaders = ppt.getNotesHeadersFooters();
|
||||
notesHeaders.setFootersText("My notes footers");
|
||||
notesHeaders.setHeaderText("My notes header");
|
||||
|
||||
ppt.createSlide();
|
||||
|
||||
FileOutputStream out = new FileOutputStream("headers_footers.ppt");
|
||||
ppt.write(out);
|
||||
out.close();
|
||||
|
||||
ppt.close();
|
||||
}
|
||||
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.apache.poi.hslf.usermodel.HSLFHyperlink;
|
||||
import org.apache.poi.hslf.usermodel.HSLFShape;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSimpleShape;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlide;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.hslf.usermodel.HSLFTextParagraph;
|
||||
import org.apache.poi.hslf.usermodel.HSLFTextRun;
|
||||
|
||||
/**
|
||||
* Demonstrates how to read hyperlinks from a presentation
|
||||
*
|
||||
* @author Yegor Kozlov
|
||||
*/
|
||||
public final class Hyperlinks {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
FileInputStream is = new FileInputStream(args[i]);
|
||||
HSLFSlideShow ppt = new HSLFSlideShow(is);
|
||||
is.close();
|
||||
|
||||
for (HSLFSlide slide : ppt.getSlides()) {
|
||||
System.out.println("\nslide " + slide.getSlideNumber());
|
||||
|
||||
// read hyperlinks from the slide's text runs
|
||||
System.out.println("- reading hyperlinks from the text runs");
|
||||
for (List<HSLFTextParagraph> paras : slide.getTextParagraphs()) {
|
||||
for (HSLFTextParagraph para : paras) {
|
||||
for (HSLFTextRun run : para) {
|
||||
HSLFHyperlink link = run.getHyperlink();
|
||||
if (link != null) {
|
||||
System.out.println(toStr(link, run.getRawText()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// in PowerPoint you can assign a hyperlink to a shape without text,
|
||||
// for example to a Line object. The code below demonstrates how to
|
||||
// read such hyperlinks
|
||||
System.out.println("- reading hyperlinks from the slide's shapes");
|
||||
for (HSLFShape sh : slide.getShapes()) {
|
||||
if (sh instanceof HSLFSimpleShape) {
|
||||
HSLFHyperlink link = ((HSLFSimpleShape)sh).getHyperlink();
|
||||
if (link != null) {
|
||||
System.out.println(toStr(link, null));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ppt.close();
|
||||
}
|
||||
}
|
||||
|
||||
static String toStr(HSLFHyperlink link, String rawText) {
|
||||
//in ppt end index is inclusive
|
||||
String formatStr = "title: %1$s, address: %2$s" + (rawText == null ? "" : ", start: %3$s, end: %4$s, substring: %5$s");
|
||||
return String.format(Locale.ROOT, formatStr, link.getLabel(), link.getAddress(), link.getStartIndex(), link.getEndIndex(), rawText);
|
||||
}
|
||||
}
|
@ -1,109 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlide;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
|
||||
/**
|
||||
* Demonstrates how you can use HSLF to convert each slide into a PNG image
|
||||
*/
|
||||
public final class PPT2PNG {
|
||||
|
||||
public static void main(String args[]) throws IOException {
|
||||
|
||||
if (args.length == 0) {
|
||||
usage();
|
||||
return;
|
||||
}
|
||||
|
||||
int slidenum = -1;
|
||||
float scale = 1;
|
||||
String file = null;
|
||||
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
if (args[i].startsWith("-")) {
|
||||
if ("-scale".equals(args[i])){
|
||||
scale = Float.parseFloat(args[++i]);
|
||||
} else if ("-slide".equals(args[i])) {
|
||||
slidenum = Integer.parseInt(args[++i]);
|
||||
}
|
||||
} else {
|
||||
file = args[i];
|
||||
}
|
||||
}
|
||||
if(file == null){
|
||||
usage();
|
||||
return;
|
||||
}
|
||||
|
||||
FileInputStream is = new FileInputStream(file);
|
||||
HSLFSlideShow ppt = new HSLFSlideShow(is);
|
||||
is.close();
|
||||
|
||||
Dimension pgsize = ppt.getPageSize();
|
||||
int width = (int)(pgsize.width*scale);
|
||||
int height = (int)(pgsize.height*scale);
|
||||
|
||||
for (HSLFSlide slide : ppt.getSlides()) {
|
||||
if (slidenum != -1 && slidenum != slide.getSlideNumber()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String title = slide.getTitle();
|
||||
System.out.println("Rendering slide "+slide.getSlideNumber() + (title == null ? "" : ": " + title));
|
||||
|
||||
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||
Graphics2D graphics = img.createGraphics();
|
||||
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
|
||||
graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
|
||||
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
|
||||
|
||||
graphics.setPaint(Color.white);
|
||||
graphics.fill(new Rectangle2D.Float(0, 0, width, height));
|
||||
|
||||
graphics.scale((double)width/pgsize.width, (double)height/pgsize.height);
|
||||
|
||||
slide.draw(graphics);
|
||||
|
||||
String fname = file.replaceAll("\\.ppt", "-" + slide.getSlideNumber() + ".png");
|
||||
FileOutputStream out = new FileOutputStream(fname);
|
||||
ImageIO.write(img, "png", out);
|
||||
out.close();
|
||||
}
|
||||
|
||||
ppt.close();
|
||||
}
|
||||
|
||||
private static void usage(){
|
||||
System.out.println("Usage: PPT2PNG [-scale <scale> -slide <num>] ppt");
|
||||
}
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.examples;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hslf.record.InteractiveInfoAtom;
|
||||
import org.apache.poi.hslf.record.RecordTypes;
|
||||
import org.apache.poi.hslf.usermodel.HSLFShape;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlide;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSoundData;
|
||||
|
||||
/**
|
||||
* For each slide iterate over shapes and found associated sound data.
|
||||
*/
|
||||
public class SoundFinder {
|
||||
public static void main(String[] args) throws IOException {
|
||||
FileInputStream fis = new FileInputStream(args[0]);
|
||||
HSLFSlideShow ppt = new HSLFSlideShow(fis);
|
||||
HSLFSoundData[] sounds = ppt.getSoundData();
|
||||
|
||||
for (HSLFSlide slide : ppt.getSlides()) {
|
||||
for (HSLFShape shape : slide.getShapes()) {
|
||||
int soundRef = getSoundReference(shape);
|
||||
if(soundRef == -1) continue;
|
||||
|
||||
|
||||
System.out.println("Slide["+slide.getSlideNumber()+"], shape["+shape.getShapeId()+"], soundRef: "+soundRef);
|
||||
System.out.println(" " + sounds[soundRef].getSoundName());
|
||||
System.out.println(" " + sounds[soundRef].getSoundType());
|
||||
}
|
||||
}
|
||||
ppt.close();
|
||||
fis.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a given shape is associated with a sound.
|
||||
* @return 0-based reference to a sound in the sound collection
|
||||
* or -1 if the shape is not associated with a sound
|
||||
*/
|
||||
protected static int getSoundReference(HSLFShape shape){
|
||||
int soundRef = -1;
|
||||
//dive into the shape container and search for InteractiveInfoAtom
|
||||
InteractiveInfoAtom info = shape.getClientDataRecord(RecordTypes.InteractiveInfo.typeID);
|
||||
if (info != null && info.getAction() == InteractiveInfoAtom.ACTION_MEDIA) {
|
||||
soundRef = info.getSoundRef();
|
||||
}
|
||||
return soundRef;
|
||||
}
|
||||
}
|
@ -1,130 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hslf.examples;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.io.FileOutputStream;
|
||||
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlide;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.hslf.usermodel.HSLFTable;
|
||||
import org.apache.poi.hslf.usermodel.HSLFTableCell;
|
||||
import org.apache.poi.hslf.usermodel.HSLFTextRun;
|
||||
import org.apache.poi.sl.draw.DrawTableShape;
|
||||
import org.apache.poi.sl.usermodel.TextParagraph.TextAlign;
|
||||
import org.apache.poi.sl.usermodel.VerticalAlignment;
|
||||
|
||||
/**
|
||||
* Demonstrates how to create tables
|
||||
*
|
||||
* @author Yegor Kozlov
|
||||
*/
|
||||
public final class TableDemo {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
//test data for the first taable
|
||||
String[][] txt1 = {
|
||||
{"INPUT FILE", "NUMBER OF RECORDS"},
|
||||
{"Item File", "11,559"},
|
||||
{"Vendor File", "502"},
|
||||
{"Purchase History File - # of PO\u2019s\r(12/01/04 - 05/31/06)", "12,852"},
|
||||
{"Purchase History File - # of PO Lines\r(12/01/04 - 05/31/06)", "53,523" },
|
||||
{"Total PO History Spend", "$10,172,038"}
|
||||
};
|
||||
|
||||
HSLFSlideShow ppt = new HSLFSlideShow();
|
||||
|
||||
HSLFSlide slide = ppt.createSlide();
|
||||
|
||||
//six rows, two columns
|
||||
HSLFTable table1 = slide.createTable(6, 2);
|
||||
for (int i = 0; i < txt1.length; i++) {
|
||||
for (int j = 0; j < txt1[i].length; j++) {
|
||||
HSLFTableCell cell = table1.getCell(i, j);
|
||||
HSLFTextRun rt = cell.getTextParagraphs().get(0).getTextRuns().get(0);
|
||||
rt.setFontFamily("Arial");
|
||||
rt.setFontSize(10d);
|
||||
if(i == 0){
|
||||
cell.getFill().setForegroundColor(new Color(227, 227, 227));
|
||||
} else {
|
||||
rt.setBold(true);
|
||||
}
|
||||
cell.setVerticalAlignment(VerticalAlignment.MIDDLE);
|
||||
cell.setHorizontalCentered(true);
|
||||
cell.setText(txt1[i][j]);
|
||||
}
|
||||
}
|
||||
|
||||
DrawTableShape dts1 = new DrawTableShape(table1);
|
||||
dts1.setAllBorders(1.0, Color.black);
|
||||
|
||||
table1.setColumnWidth(0, 300);
|
||||
table1.setColumnWidth(1, 150);
|
||||
|
||||
int pgWidth = ppt.getPageSize().width;
|
||||
table1.moveTo((pgWidth - table1.getAnchor().getWidth())/2., 100.);
|
||||
|
||||
//test data for the second taable
|
||||
String[][] txt2 = {
|
||||
{"Data Source"},
|
||||
{"CAS Internal Metrics - Item Master Summary\r" +
|
||||
"CAS Internal Metrics - Vendor Summary\r" +
|
||||
"CAS Internal Metrics - PO History Summary"}
|
||||
};
|
||||
|
||||
//two rows, one column
|
||||
HSLFTable table2 = slide.createTable(2, 1);
|
||||
for (int i = 0; i < txt2.length; i++) {
|
||||
for (int j = 0; j < txt2[i].length; j++) {
|
||||
HSLFTableCell cell = table2.getCell(i, j);
|
||||
HSLFTextRun rt = cell.getTextParagraphs().get(0).getTextRuns().get(0);
|
||||
rt.setFontSize(10d);
|
||||
rt.setFontFamily("Arial");
|
||||
if(i == 0){
|
||||
cell.getFill().setForegroundColor(new Color(0, 51, 102));
|
||||
rt.setFontColor(Color.white);
|
||||
rt.setBold(true);
|
||||
rt.setFontSize(14d);
|
||||
cell.setHorizontalCentered(true);
|
||||
} else {
|
||||
rt.getTextParagraph().setBullet(true);
|
||||
rt.setFontSize(12d);
|
||||
rt.getTextParagraph().setTextAlign(TextAlign.LEFT);
|
||||
cell.setHorizontalCentered(false);
|
||||
}
|
||||
cell.setVerticalAlignment(VerticalAlignment.MIDDLE);
|
||||
cell.setText(txt2[i][j]);
|
||||
}
|
||||
}
|
||||
table2.setColumnWidth(0, 300);
|
||||
table2.setRowHeight(0, 30);
|
||||
table2.setRowHeight(1, 70);
|
||||
|
||||
DrawTableShape dts2 = new DrawTableShape(table2);
|
||||
dts2.setOutsideBorders(Color.black, 1.0);
|
||||
|
||||
table2.moveTo(200, 400);
|
||||
|
||||
FileOutputStream out = new FileOutputStream("hslf-table.ppt");
|
||||
ppt.write(out);
|
||||
out.close();
|
||||
|
||||
ppt.close();
|
||||
}
|
||||
}
|
@ -1,171 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hsmf.examples;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import org.apache.poi.hsmf.MAPIMessage;
|
||||
import org.apache.poi.hsmf.datatypes.AttachmentChunks;
|
||||
import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
|
||||
|
||||
/**
|
||||
* Reads one or several Outlook MSG files and for each of them creates
|
||||
* a text file from available chunks and a directory that contains
|
||||
* attachments.
|
||||
*
|
||||
* @author Bruno Girin
|
||||
*/
|
||||
public class Msg2txt {
|
||||
|
||||
/**
|
||||
* The stem used to create file names for the text file and the directory
|
||||
* that contains the attachments.
|
||||
*/
|
||||
private String fileNameStem;
|
||||
|
||||
/**
|
||||
* The Outlook MSG file being processed.
|
||||
*/
|
||||
private MAPIMessage msg;
|
||||
|
||||
public Msg2txt(String fileName) throws IOException {
|
||||
fileNameStem = fileName;
|
||||
if(fileNameStem.endsWith(".msg") || fileNameStem.endsWith(".MSG")) {
|
||||
fileNameStem = fileNameStem.substring(0, fileNameStem.length() - 4);
|
||||
}
|
||||
msg = new MAPIMessage(fileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the message.
|
||||
*
|
||||
* @throws IOException if an exception occurs while writing the message out
|
||||
*/
|
||||
public void processMessage() throws IOException {
|
||||
String txtFileName = fileNameStem + ".txt";
|
||||
String attDirName = fileNameStem + "-att";
|
||||
PrintWriter txtOut = null;
|
||||
try {
|
||||
txtOut = new PrintWriter(txtFileName);
|
||||
try {
|
||||
String displayFrom = msg.getDisplayFrom();
|
||||
txtOut.println("From: "+displayFrom);
|
||||
} catch (ChunkNotFoundException e) {
|
||||
// ignore
|
||||
}
|
||||
try {
|
||||
String displayTo = msg.getDisplayTo();
|
||||
txtOut.println("To: "+displayTo);
|
||||
} catch (ChunkNotFoundException e) {
|
||||
// ignore
|
||||
}
|
||||
try {
|
||||
String displayCC = msg.getDisplayCC();
|
||||
txtOut.println("CC: "+displayCC);
|
||||
} catch (ChunkNotFoundException e) {
|
||||
// ignore
|
||||
}
|
||||
try {
|
||||
String displayBCC = msg.getDisplayBCC();
|
||||
txtOut.println("BCC: "+displayBCC);
|
||||
} catch (ChunkNotFoundException e) {
|
||||
// ignore
|
||||
}
|
||||
try {
|
||||
String subject = msg.getSubject();
|
||||
txtOut.println("Subject: "+subject);
|
||||
} catch (ChunkNotFoundException e) {
|
||||
// ignore
|
||||
}
|
||||
try {
|
||||
String body = msg.getTextBody();
|
||||
txtOut.println(body);
|
||||
} catch (ChunkNotFoundException e) {
|
||||
System.err.println("No message body");
|
||||
}
|
||||
|
||||
AttachmentChunks[] attachments = msg.getAttachmentFiles();
|
||||
if(attachments.length > 0) {
|
||||
File d = new File(attDirName);
|
||||
if(d.mkdir()) {
|
||||
for(AttachmentChunks attachment : attachments) {
|
||||
processAttachment(attachment, d);
|
||||
}
|
||||
} else {
|
||||
System.err.println("Can't create directory "+attDirName);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if(txtOut != null) {
|
||||
txtOut.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes a single attachment: reads it from the Outlook MSG file and
|
||||
* writes it to disk as an individual file.
|
||||
*
|
||||
* @param attachment the chunk group describing the attachment
|
||||
* @param dir the directory in which to write the attachment file
|
||||
* @throws IOException when any of the file operations fails
|
||||
*/
|
||||
public void processAttachment(AttachmentChunks attachment,
|
||||
File dir) throws IOException {
|
||||
String fileName = attachment.getAttachFileName().toString();
|
||||
if(attachment.getAttachLongFileName() != null) {
|
||||
fileName = attachment.getAttachLongFileName().toString();
|
||||
}
|
||||
|
||||
File f = new File(dir, fileName);
|
||||
OutputStream fileOut = null;
|
||||
try {
|
||||
fileOut = new FileOutputStream(f);
|
||||
fileOut.write(attachment.getAttachData().getValue());
|
||||
} finally {
|
||||
if(fileOut != null) {
|
||||
fileOut.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the list of arguments as a list of names of Outlook MSG files.
|
||||
*
|
||||
* @param args the list of MSG files to process
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
if(args.length <= 0) {
|
||||
System.err.println("No files names provided");
|
||||
} else {
|
||||
for(int i = 0; i < args.length; i++) {
|
||||
try {
|
||||
Msg2txt processor = new Msg2txt(args[i]);
|
||||
processor.processMessage();
|
||||
} catch (IOException e) {
|
||||
System.err.println("Could not process "+args[i]+": "+e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,329 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.eventusermodel.examples;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder.SheetRecordCollectingListener;
|
||||
import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener;
|
||||
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
|
||||
import org.apache.poi.hssf.eventusermodel.HSSFListener;
|
||||
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
|
||||
import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;
|
||||
import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
|
||||
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
|
||||
import org.apache.poi.hssf.model.HSSFFormulaParser;
|
||||
import org.apache.poi.hssf.record.BOFRecord;
|
||||
import org.apache.poi.hssf.record.BlankRecord;
|
||||
import org.apache.poi.hssf.record.BoolErrRecord;
|
||||
import org.apache.poi.hssf.record.BoundSheetRecord;
|
||||
import org.apache.poi.hssf.record.FormulaRecord;
|
||||
import org.apache.poi.hssf.record.LabelRecord;
|
||||
import org.apache.poi.hssf.record.LabelSSTRecord;
|
||||
import org.apache.poi.hssf.record.NoteRecord;
|
||||
import org.apache.poi.hssf.record.NumberRecord;
|
||||
import org.apache.poi.hssf.record.RKRecord;
|
||||
import org.apache.poi.hssf.record.Record;
|
||||
import org.apache.poi.hssf.record.SSTRecord;
|
||||
import org.apache.poi.hssf.record.StringRecord;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
|
||||
/**
|
||||
* A XLS -> CSV processor, that uses the MissingRecordAware
|
||||
* EventModel code to ensure it outputs all columns and rows.
|
||||
* @author Nick Burch
|
||||
*/
|
||||
public class XLS2CSVmra implements HSSFListener {
|
||||
private int minColumns;
|
||||
private POIFSFileSystem fs;
|
||||
private PrintStream output;
|
||||
|
||||
private int lastRowNumber;
|
||||
private int lastColumnNumber;
|
||||
|
||||
/** Should we output the formula, or the value it has? */
|
||||
private boolean outputFormulaValues = true;
|
||||
|
||||
/** For parsing Formulas */
|
||||
private SheetRecordCollectingListener workbookBuildingListener;
|
||||
private HSSFWorkbook stubWorkbook;
|
||||
|
||||
// Records we pick up as we process
|
||||
private SSTRecord sstRecord;
|
||||
private FormatTrackingHSSFListener formatListener;
|
||||
|
||||
/** So we known which sheet we're on */
|
||||
private int sheetIndex = -1;
|
||||
private BoundSheetRecord[] orderedBSRs;
|
||||
private List<BoundSheetRecord> boundSheetRecords = new ArrayList<BoundSheetRecord>();
|
||||
|
||||
// For handling formulas with string results
|
||||
private int nextRow;
|
||||
private int nextColumn;
|
||||
private boolean outputNextStringRecord;
|
||||
|
||||
/**
|
||||
* Creates a new XLS -> CSV converter
|
||||
* @param fs The POIFSFileSystem to process
|
||||
* @param output The PrintStream to output the CSV to
|
||||
* @param minColumns The minimum number of columns to output, or -1 for no minimum
|
||||
*/
|
||||
public XLS2CSVmra(POIFSFileSystem fs, PrintStream output, int minColumns) {
|
||||
this.fs = fs;
|
||||
this.output = output;
|
||||
this.minColumns = minColumns;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new XLS -> CSV converter
|
||||
* @param filename The file to process
|
||||
* @param minColumns The minimum number of columns to output, or -1 for no minimum
|
||||
* @throws IOException
|
||||
* @throws FileNotFoundException
|
||||
*/
|
||||
public XLS2CSVmra(String filename, int minColumns) throws IOException, FileNotFoundException {
|
||||
this(
|
||||
new POIFSFileSystem(new FileInputStream(filename)),
|
||||
System.out, minColumns
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiates the processing of the XLS file to CSV
|
||||
*/
|
||||
public void process() throws IOException {
|
||||
MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
|
||||
formatListener = new FormatTrackingHSSFListener(listener);
|
||||
|
||||
HSSFEventFactory factory = new HSSFEventFactory();
|
||||
HSSFRequest request = new HSSFRequest();
|
||||
|
||||
if(outputFormulaValues) {
|
||||
request.addListenerForAllRecords(formatListener);
|
||||
} else {
|
||||
workbookBuildingListener = new SheetRecordCollectingListener(formatListener);
|
||||
request.addListenerForAllRecords(workbookBuildingListener);
|
||||
}
|
||||
|
||||
factory.processWorkbookEvents(request, fs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Main HSSFListener method, processes events, and outputs the
|
||||
* CSV as the file is processed.
|
||||
*/
|
||||
@Override
|
||||
public void processRecord(Record record) {
|
||||
int thisRow = -1;
|
||||
int thisColumn = -1;
|
||||
String thisStr = null;
|
||||
|
||||
switch (record.getSid())
|
||||
{
|
||||
case BoundSheetRecord.sid:
|
||||
boundSheetRecords.add((BoundSheetRecord)record);
|
||||
break;
|
||||
case BOFRecord.sid:
|
||||
BOFRecord br = (BOFRecord)record;
|
||||
if(br.getType() == BOFRecord.TYPE_WORKSHEET) {
|
||||
// Create sub workbook if required
|
||||
if(workbookBuildingListener != null && stubWorkbook == null) {
|
||||
stubWorkbook = workbookBuildingListener.getStubHSSFWorkbook();
|
||||
}
|
||||
|
||||
// Output the worksheet name
|
||||
// Works by ordering the BSRs by the location of
|
||||
// their BOFRecords, and then knowing that we
|
||||
// process BOFRecords in byte offset order
|
||||
sheetIndex++;
|
||||
if(orderedBSRs == null) {
|
||||
orderedBSRs = BoundSheetRecord.orderByBofPosition(boundSheetRecords);
|
||||
}
|
||||
output.println();
|
||||
output.println(
|
||||
orderedBSRs[sheetIndex].getSheetname() +
|
||||
" [" + (sheetIndex+1) + "]:"
|
||||
);
|
||||
}
|
||||
break;
|
||||
|
||||
case SSTRecord.sid:
|
||||
sstRecord = (SSTRecord) record;
|
||||
break;
|
||||
|
||||
case BlankRecord.sid:
|
||||
BlankRecord brec = (BlankRecord) record;
|
||||
|
||||
thisRow = brec.getRow();
|
||||
thisColumn = brec.getColumn();
|
||||
thisStr = "";
|
||||
break;
|
||||
case BoolErrRecord.sid:
|
||||
BoolErrRecord berec = (BoolErrRecord) record;
|
||||
|
||||
thisRow = berec.getRow();
|
||||
thisColumn = berec.getColumn();
|
||||
thisStr = "";
|
||||
break;
|
||||
|
||||
case FormulaRecord.sid:
|
||||
FormulaRecord frec = (FormulaRecord) record;
|
||||
|
||||
thisRow = frec.getRow();
|
||||
thisColumn = frec.getColumn();
|
||||
|
||||
if(outputFormulaValues) {
|
||||
if(Double.isNaN( frec.getValue() )) {
|
||||
// Formula result is a string
|
||||
// This is stored in the next record
|
||||
outputNextStringRecord = true;
|
||||
nextRow = frec.getRow();
|
||||
nextColumn = frec.getColumn();
|
||||
} else {
|
||||
thisStr = formatListener.formatNumberDateCell(frec);
|
||||
}
|
||||
} else {
|
||||
thisStr = '"' +
|
||||
HSSFFormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';
|
||||
}
|
||||
break;
|
||||
case StringRecord.sid:
|
||||
if(outputNextStringRecord) {
|
||||
// String for formula
|
||||
StringRecord srec = (StringRecord)record;
|
||||
thisStr = srec.getString();
|
||||
thisRow = nextRow;
|
||||
thisColumn = nextColumn;
|
||||
outputNextStringRecord = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case LabelRecord.sid:
|
||||
LabelRecord lrec = (LabelRecord) record;
|
||||
|
||||
thisRow = lrec.getRow();
|
||||
thisColumn = lrec.getColumn();
|
||||
thisStr = '"' + lrec.getValue() + '"';
|
||||
break;
|
||||
case LabelSSTRecord.sid:
|
||||
LabelSSTRecord lsrec = (LabelSSTRecord) record;
|
||||
|
||||
thisRow = lsrec.getRow();
|
||||
thisColumn = lsrec.getColumn();
|
||||
if(sstRecord == null) {
|
||||
thisStr = '"' + "(No SST Record, can't identify string)" + '"';
|
||||
} else {
|
||||
thisStr = '"' + sstRecord.getString(lsrec.getSSTIndex()).toString() + '"';
|
||||
}
|
||||
break;
|
||||
case NoteRecord.sid:
|
||||
NoteRecord nrec = (NoteRecord) record;
|
||||
|
||||
thisRow = nrec.getRow();
|
||||
thisColumn = nrec.getColumn();
|
||||
// TODO: Find object to match nrec.getShapeId()
|
||||
thisStr = '"' + "(TODO)" + '"';
|
||||
break;
|
||||
case NumberRecord.sid:
|
||||
NumberRecord numrec = (NumberRecord) record;
|
||||
|
||||
thisRow = numrec.getRow();
|
||||
thisColumn = numrec.getColumn();
|
||||
|
||||
// Format
|
||||
thisStr = formatListener.formatNumberDateCell(numrec);
|
||||
break;
|
||||
case RKRecord.sid:
|
||||
RKRecord rkrec = (RKRecord) record;
|
||||
|
||||
thisRow = rkrec.getRow();
|
||||
thisColumn = rkrec.getColumn();
|
||||
thisStr = '"' + "(TODO)" + '"';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Handle new row
|
||||
if(thisRow != -1 && thisRow != lastRowNumber) {
|
||||
lastColumnNumber = -1;
|
||||
}
|
||||
|
||||
// Handle missing column
|
||||
if(record instanceof MissingCellDummyRecord) {
|
||||
MissingCellDummyRecord mc = (MissingCellDummyRecord)record;
|
||||
thisRow = mc.getRow();
|
||||
thisColumn = mc.getColumn();
|
||||
thisStr = "";
|
||||
}
|
||||
|
||||
// If we got something to print out, do so
|
||||
if(thisStr != null) {
|
||||
if(thisColumn > 0) {
|
||||
output.print(',');
|
||||
}
|
||||
output.print(thisStr);
|
||||
}
|
||||
|
||||
// Update column and row count
|
||||
if(thisRow > -1)
|
||||
lastRowNumber = thisRow;
|
||||
if(thisColumn > -1)
|
||||
lastColumnNumber = thisColumn;
|
||||
|
||||
// Handle end of row
|
||||
if(record instanceof LastCellOfRowDummyRecord) {
|
||||
// Print out any missing commas if needed
|
||||
if(minColumns > 0) {
|
||||
// Columns are 0 based
|
||||
if(lastColumnNumber == -1) { lastColumnNumber = 0; }
|
||||
for(int i=lastColumnNumber; i<(minColumns); i++) {
|
||||
output.print(',');
|
||||
}
|
||||
}
|
||||
|
||||
// We're onto a new row
|
||||
lastColumnNumber = -1;
|
||||
|
||||
// End the row
|
||||
output.println();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
if(args.length < 1) {
|
||||
System.err.println("Use:");
|
||||
System.err.println(" XLS2CSVmra <xls file> [min columns]");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
int minColumns = -1;
|
||||
if(args.length >= 2) {
|
||||
minColumns = Integer.parseInt(args[1]);
|
||||
}
|
||||
|
||||
XLS2CSVmra xls2csv = new XLS2CSVmra(args[0], minColumns);
|
||||
xls2csv.process();
|
||||
}
|
||||
}
|
@ -1,944 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.util.CellReference;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
|
||||
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
|
||||
import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
|
||||
|
||||
|
||||
/**
|
||||
* Demonstrates how to add an image to a worksheet and set that image's size
|
||||
* to a specific number of milimetres irrespective of the width of the columns
|
||||
* or height of the rows. Overridden methods are provided so that the location
|
||||
* of the image - the cells row and column co-ordinates that define the top
|
||||
* left hand corners of the image - can be identified either in the familiar
|
||||
* Excel manner - A1 for instance - or using POI's methodolody of a column and
|
||||
* row index where 0, 0 would indicate cell A1.
|
||||
*
|
||||
* The best way to make use of these techniques is to delay adding the image to
|
||||
* the sheet until all other work has been completed. That way, the sizes of
|
||||
* all rows and columns will have been adjusted - assuming that step was
|
||||
* necessary. Even though the anchors type is set to prevent the image moving
|
||||
* or re-sizing, this setting does not have any effect until the sheet is being
|
||||
* viewed using the Excel application.
|
||||
*
|
||||
* The key to the process is the HSSFClientAnchor class. It accepts eight
|
||||
* parameters that define, in order;
|
||||
*
|
||||
* * How far - in terms of co-ordinate position - the image should be inset
|
||||
* from the left hand border of a cell.
|
||||
* * How far - in terms of co-ordinate positions - the image should be inset
|
||||
* from the from the top of the cell.
|
||||
* * How far - in terms of co-ordinate positions - the right hand edge of
|
||||
* the image should protrude into a cell (measured from the cell's left hand
|
||||
* edge to the image's right hand edge).
|
||||
* * How far - in terms of co-ordinate positions - the bottm edge of the
|
||||
* image should protrude into a row (measured from the cell's top edge to
|
||||
* the image's bottom edge).
|
||||
* * The index of the column that contains the cell whose top left hand
|
||||
* corner should be aligned with the top left hand corner of the image.
|
||||
* * The index of the row that contains the cell whose top left hand corner
|
||||
* should be aligned with the image's top left hand corner.
|
||||
* * The index of the column that contains the cell whose top left hand
|
||||
* corner should be aligned with the image's bottom right hand corner
|
||||
* * The index number of the row that contains the cell whose top left
|
||||
* hand corner should be aligned with the images bottom right hand corner.
|
||||
*
|
||||
* It can be used to add an image into cell A1, for example, in the following
|
||||
* manner;
|
||||
*
|
||||
* HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,
|
||||
* (short)0, 0, (short)1, 1);
|
||||
*
|
||||
* The final four parameters determine that the top left hand corner should be
|
||||
* aligned with the top left hand corner of cell A1 and it's bottom right
|
||||
* hand corner with the top left hand corner of cell B2. Think of the image as
|
||||
* being stretched so that it's top left hand corner is aligned with the top
|
||||
* left hand corner of cell A1 and it's bottom right hand corner is aligned with
|
||||
* the top left hand corner of cell B1. Interestingly, this would also produce
|
||||
* the same results;
|
||||
*
|
||||
* anchor = new HSSFClientAnchor(0, 0, 1023, 255,
|
||||
* (short)0, 0, (short)0, 0);
|
||||
*
|
||||
* Note that the final four parameters all contain the same value and seem to
|
||||
* indicate that the images top left hand corner is aligned with the top left
|
||||
* hand corner of cell A1 and that it's bottom right hand corner is also
|
||||
* aligned with the top left hand corner of cell A1. Yet, running this code
|
||||
* would see the image fully occupying cell A1. That is the result of the
|
||||
* values passed to parameters three and four; these I have referred to as
|
||||
* determing the images co-ordinates within the cell. They indicate that the
|
||||
* image should occupy - in order - the full width of the column and the full
|
||||
* height of the row.
|
||||
*
|
||||
* The co-ordinate values shown are the maxima; and they are independent of
|
||||
* row height/column width and of the font used. Passing 255 will always result
|
||||
* in the image occupying the full height of the row and passing 1023 will
|
||||
* always result in the image occupying the full width of the column. They help
|
||||
* in situations where an image is larger than a column/row and must overlap
|
||||
* into the next column/row. Using them does mean, however, that it is often
|
||||
* necessary to perform conversions between Excel's characters units, points,
|
||||
* pixels and millimetres in order to establish how many rows/columns an image
|
||||
* should occupy and just what the varous insets ought to be.
|
||||
*
|
||||
* Note that the first two parameters of the HSSFClientAchor classes constructor
|
||||
* are not made use of in the code that follows. It would be fairly trivial
|
||||
* however to extend these example further and provide methods that would centre
|
||||
* an image within a cell or allow the user to specify that a plain border a
|
||||
* fixed number of millimetres wide should wrap around the image. Those first
|
||||
* two parameters would make this sort of functionality perfectly possible.
|
||||
*
|
||||
* Owing to the various conversions used, the actual size of the image may vary
|
||||
* from that required; testing has so far found this to be in the region of
|
||||
* plus or minus two millimetres. Most likely by modifying the way the
|
||||
* calculations are performed - possibly using double(s) throughout and
|
||||
* rounding the values at the correct point - it is likely that these errors
|
||||
* could be reduced or removed.
|
||||
*
|
||||
* A note concerning Excels' image resizing behaviour. The HSSFClientAnchor
|
||||
* class contains a method called setAnchorType(int) which can be used to
|
||||
* determine how Excel will resize an image in reponse to the user increasing
|
||||
* or decreasing the dimensions of the cell containing the image. There are
|
||||
* three values that can be passed to this method; 0 = To move and size the
|
||||
* image with the cell, 2 = To move but don't size the image with the cell,
|
||||
* 3 = To prevent the image from moving or being resized along with the cell. If
|
||||
* an image is inserted using this class and placed into a single cell then if
|
||||
* the setAnchorType(int) method is called and a value of either 0 or 2 passed
|
||||
* to it, the resultant resizing behaviour may be a surprise. The image will not
|
||||
* grow in size of the column is made wider or the row higher but it will shrink
|
||||
* if the columns width or rows height are reduced.
|
||||
*
|
||||
* @author Mark Beardsley [msb at apache.org]
|
||||
* @version 1.00 5th August 2009.
|
||||
*/
|
||||
public class AddDimensionedImage {
|
||||
|
||||
// Four constants that determine how - and indeed whether - the rows
|
||||
// and columns an image may overlie should be expanded to accomodate that
|
||||
// image.
|
||||
// Passing EXPAND_ROW will result in the height of a row being increased
|
||||
// to accomodate the image if it is not already larger. The image will
|
||||
// be layed across one or more columns.
|
||||
// Passing EXPAND_COLUMN will result in the width of the column being
|
||||
// increased to accomodate the image if it is not already larger. The image
|
||||
// will be layed across one or many rows.
|
||||
// Passing EXPAND_ROW_AND_COLUMN will result in the height of the row
|
||||
// bing increased along with the width of the column to accomdate the
|
||||
// image if either is not already larger.
|
||||
// Passing OVERLAY_ROW_AND_COLUMN will result in the image being layed
|
||||
// over one or more rows and columns. No row or column will be resized,
|
||||
// instead, code will determine how many rows and columns the image should
|
||||
// overlie.
|
||||
public static final int EXPAND_ROW = 1;
|
||||
public static final int EXPAND_COLUMN = 2;
|
||||
public static final int EXPAND_ROW_AND_COLUMN = 3;
|
||||
public static final int OVERLAY_ROW_AND_COLUMN = 7;
|
||||
|
||||
/**
|
||||
* Add an image to a worksheet.
|
||||
*
|
||||
* @param cellNumber A String that contains the location of the cell whose
|
||||
* top left hand corner should be aligned with the top
|
||||
* left hand corner of the image; for example "A1", "A2"
|
||||
* etc. This is to support the familiar Excel syntax.
|
||||
* Whilst images are are not actually inserted into cells
|
||||
* this provides a convenient method of indicating where
|
||||
* the image should be positioned on the sheet.
|
||||
* @param sheet A reference to the sheet that contains the cell referenced
|
||||
* above.
|
||||
* @param imageFile A String that encapsulates the name of and path to
|
||||
* the image that is to be 'inserted into' the sheet.
|
||||
* @param reqImageWidthMM A primitive double that contains the required
|
||||
* width of the image in millimetres.
|
||||
* @param reqImageHeightMM A primitive double that contains the required
|
||||
* height of the image in millimetres.
|
||||
* @param resizeBehaviour A primitive int whose value will determine how
|
||||
* the code should react if the image is larger than
|
||||
* the cell referenced by the cellNumber parameter.
|
||||
* Four constants are provided to determine what
|
||||
* should happen;
|
||||
* AddDimensionedImage.EXPAND_ROW
|
||||
* AddDimensionedImage.EXPAND_COLUMN
|
||||
* AddDimensionedImage.EXPAND_ROW_AND_COLUMN
|
||||
* AddDimensionedImage.OVERLAY_ROW_AND_COLUMN
|
||||
* @throws java.io.FileNotFoundException If the file containing the image
|
||||
* cannot be located.
|
||||
* @throws java.io.IOException If a problem occurs whilst reading the file
|
||||
* of image data.
|
||||
* @throws java.lang.IllegalArgumentException If an invalid value is passed
|
||||
* to the resizeBehaviour
|
||||
* parameter.
|
||||
*/
|
||||
public void addImageToSheet(String cellNumber, HSSFSheet sheet,
|
||||
String imageFile, double reqImageWidthMM, double reqImageHeightMM,
|
||||
int resizeBehaviour) throws IOException, IllegalArgumentException {
|
||||
// Convert the String into column and row indices then chain the
|
||||
// call to the overridden addImageToSheet() method.
|
||||
CellReference cellRef = new CellReference(cellNumber);
|
||||
this.addImageToSheet(cellRef.getCol(), cellRef.getRow(), sheet,
|
||||
imageFile, reqImageWidthMM, reqImageHeightMM,resizeBehaviour);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an image to a worksheet.
|
||||
*
|
||||
* @param colNumber A primitive int that contains the index number of a
|
||||
* column on the worksheet; POI column indices are zero
|
||||
* based. Together with the rowNumber parameter's value,
|
||||
* this parameter identifies a cell on the worksheet. The
|
||||
* image's top left hand corner will be aligned with the
|
||||
* top left hand corner of this cell.
|
||||
* @param rowNumber A primtive int that contains the index number of a row
|
||||
* on the worksheet; POI row indices are zero based.
|
||||
* Together with the rowNumber parameter's value, this
|
||||
* parameter identifies a cell on the worksheet. The
|
||||
* image's top left hand corner will be aligned with the
|
||||
* top left hand corner of this cell.
|
||||
* @param sheet A reference to the sheet that contains the cell identified
|
||||
* by the two parameters above.
|
||||
* @param imageFile A String that encapsulates the name of and path to
|
||||
* the image that is to be 'inserted into' the sheet.
|
||||
* @param reqImageWidthMM A primitive double that contains the required
|
||||
* width of the image in millimetres.
|
||||
* @param reqImageHeightMM A primitive double that contains the required
|
||||
* height of the image in millimetres.
|
||||
* @param resizeBehaviour A primitive int whose value will determine how
|
||||
* the code should react if the image is larger than
|
||||
* the cell referenced by the colNumber and
|
||||
* rowNumber parameters. Four constants are provided
|
||||
* to determine what should happen;
|
||||
* AddDimensionedImage.EXPAND_ROW
|
||||
* AddDimensionedImage.EXPAND_COLUMN
|
||||
* AddDimensionedImage.EXPAND_ROW_AND_COLUMN
|
||||
* AddDimensionedImage.OVERLAY_ROW_AND_COLUMN
|
||||
* @throws java.io.FileNotFoundException If the file containing the image
|
||||
* cannot be located.
|
||||
* @throws java.io.IOException If a problem occurs whilst reading the file
|
||||
* of image data.
|
||||
* @throws java.lang.IllegalArgumentException If an invalid value is passed
|
||||
* to the resizeBehaviour
|
||||
* parameter.
|
||||
*/
|
||||
private void addImageToSheet(int colNumber, int rowNumber, HSSFSheet sheet,
|
||||
String imageFile, double reqImageWidthMM, double reqImageHeightMM,
|
||||
int resizeBehaviour) throws FileNotFoundException, IOException,
|
||||
IllegalArgumentException {
|
||||
HSSFClientAnchor anchor = null;
|
||||
HSSFPatriarch patriarch = null;
|
||||
ClientAnchorDetail rowClientAnchorDetail = null;
|
||||
ClientAnchorDetail colClientAnchorDetail = null;
|
||||
|
||||
// Validate the resizeBehaviour parameter.
|
||||
if((resizeBehaviour != AddDimensionedImage.EXPAND_COLUMN) &&
|
||||
(resizeBehaviour != AddDimensionedImage.EXPAND_ROW) &&
|
||||
(resizeBehaviour != AddDimensionedImage.EXPAND_ROW_AND_COLUMN) &&
|
||||
(resizeBehaviour != AddDimensionedImage.OVERLAY_ROW_AND_COLUMN)) {
|
||||
throw new IllegalArgumentException("Invalid value passed to the " +
|
||||
"resizeBehaviour parameter of AddDimensionedImage.addImageToSheet()");
|
||||
}
|
||||
|
||||
// Call methods to calculate how the image and sheet should be
|
||||
// manipulated to accomodate the image; columns and then rows.
|
||||
colClientAnchorDetail = this.fitImageToColumns(sheet, colNumber,
|
||||
reqImageWidthMM, resizeBehaviour);
|
||||
rowClientAnchorDetail = this.fitImageToRows(sheet, rowNumber,
|
||||
reqImageHeightMM, resizeBehaviour);
|
||||
|
||||
// Having determined if and how to resize the rows, columns and/or the
|
||||
// image, create the HSSFClientAnchor object to position the image on
|
||||
// the worksheet. Note how the two ClientAnchorDetail records are
|
||||
// interrogated to recover the row/column co-ordinates and any insets.
|
||||
// The first two parameters are not used currently but could be if the
|
||||
// need arose to extend the functionality of this code by adding the
|
||||
// ability to specify that a clear 'border' be placed around the image.
|
||||
anchor = new HSSFClientAnchor(0,
|
||||
0,
|
||||
colClientAnchorDetail.getInset(),
|
||||
rowClientAnchorDetail.getInset(),
|
||||
(short)colClientAnchorDetail.getFromIndex(),
|
||||
rowClientAnchorDetail.getFromIndex(),
|
||||
(short)colClientAnchorDetail.getToIndex(),
|
||||
rowClientAnchorDetail.getToIndex());
|
||||
|
||||
// For now, set the anchor type to do not move or resize the
|
||||
// image as the size of the row/column is adjusted. This could easilly
|
||||
// become another parameter passed to the method.
|
||||
//anchor.setAnchorType(HSSFClientAnchor.DONT_MOVE_AND_RESIZE);
|
||||
anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE);
|
||||
|
||||
// Now, add the picture to the workbook. Note that the type is assumed
|
||||
// to be a JPEG/JPG, this could easily (and should) be parameterised
|
||||
// however.
|
||||
//int index = sheet.getWorkbook().addPicture(this.imageToBytes(imageFile),
|
||||
// HSSFWorkbook.PICTURE_TYPE_JPEG);
|
||||
int index = sheet.getWorkbook().addPicture(this.imageToBytes(imageFile), HSSFWorkbook.PICTURE_TYPE_PNG);
|
||||
|
||||
// Get the drawing patriarch and create the picture.
|
||||
patriarch = sheet.createDrawingPatriarch();
|
||||
patriarch.createPicture(anchor, index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the sheets columns should be re-sized to accomodate
|
||||
* the image, adjusts the columns width if necessary and creates then
|
||||
* returns a ClientAnchorDetail object that facilitates construction of
|
||||
* an HSSFClientAnchor that will fix the image on the sheet and establish
|
||||
* it's size.
|
||||
*
|
||||
* @param sheet A reference to the sheet that will 'contain' the image.
|
||||
* @param colNumber A primtive int that contains the index number of a
|
||||
* column on the sheet.
|
||||
* @param reqImageWidthMM A primtive double that contains the required
|
||||
* width of the image in millimetres
|
||||
* @param resizeBehaviour A primitve int whose value will indicate how the
|
||||
* width of the column should be adjusted if the
|
||||
* required width of the image is greater than the
|
||||
* width of the column.
|
||||
* @return An instance of the ClientAnchorDetail class that will contain
|
||||
* the index number of the column containing the cell whose top
|
||||
* left hand corner also defines the top left hand corner of the
|
||||
* image, the index number column containing the cell whose top
|
||||
* left hand corner also defines the bottom right hand corner of
|
||||
* the image and an inset that determines how far the right hand
|
||||
* edge of the image can protrude into the next column - expressed
|
||||
* as a specific number of co-ordinate positions.
|
||||
*/
|
||||
private ClientAnchorDetail fitImageToColumns(HSSFSheet sheet, int colNumber,
|
||||
double reqImageWidthMM, int resizeBehaviour) {
|
||||
|
||||
double colWidthMM = 0.0D;
|
||||
double colCoordinatesPerMM = 0.0D;
|
||||
int pictureWidthCoordinates = 0;
|
||||
ClientAnchorDetail colClientAnchorDetail = null;
|
||||
|
||||
// Get the colum's width in millimetres
|
||||
colWidthMM = ConvertImageUnits.widthUnits2Millimetres(
|
||||
(short)sheet.getColumnWidth(colNumber));
|
||||
|
||||
// Check that the column's width will accomodate the image at the
|
||||
// required dimension. If the width of the column is LESS than the
|
||||
// required width of the image, decide how the application should
|
||||
// respond - resize the column or overlay the image across one or more
|
||||
// columns.
|
||||
if(colWidthMM < reqImageWidthMM) {
|
||||
|
||||
// Should the column's width simply be expanded?
|
||||
if((resizeBehaviour == AddDimensionedImage.EXPAND_COLUMN) ||
|
||||
(resizeBehaviour == AddDimensionedImage.EXPAND_ROW_AND_COLUMN)) {
|
||||
// Set the width of the column by converting the required image
|
||||
// width from millimetres into Excel's column width units.
|
||||
sheet.setColumnWidth(colNumber,
|
||||
ConvertImageUnits.millimetres2WidthUnits(reqImageWidthMM));
|
||||
// To make the image occupy the full width of the column, convert
|
||||
// the required width of the image into co-ordinates. This value
|
||||
// will become the inset for the ClientAnchorDetail class that
|
||||
// is then instantiated.
|
||||
colWidthMM = reqImageWidthMM;
|
||||
colCoordinatesPerMM = ConvertImageUnits.TOTAL_COLUMN_COORDINATE_POSITIONS /
|
||||
colWidthMM;
|
||||
pictureWidthCoordinates = (int)(reqImageWidthMM * colCoordinatesPerMM);
|
||||
colClientAnchorDetail = new ClientAnchorDetail(colNumber,
|
||||
colNumber, pictureWidthCoordinates);
|
||||
}
|
||||
// If the user has chosen to overlay both rows and columns or just
|
||||
// to expand ONLY the size of the rows, then calculate how to lay
|
||||
// the image out across one or more columns.
|
||||
else if ((resizeBehaviour == AddDimensionedImage.OVERLAY_ROW_AND_COLUMN) ||
|
||||
(resizeBehaviour == AddDimensionedImage.EXPAND_ROW)) {
|
||||
colClientAnchorDetail = this.calculateColumnLocation(sheet,
|
||||
colNumber, reqImageWidthMM);
|
||||
}
|
||||
}
|
||||
// If the column is wider than the image.
|
||||
else {
|
||||
// Mow many co-ordinate positions are there per millimetre?
|
||||
colCoordinatesPerMM = ConvertImageUnits.TOTAL_COLUMN_COORDINATE_POSITIONS /
|
||||
colWidthMM;
|
||||
// Given the width of the image, what should be it's co-ordinate?
|
||||
pictureWidthCoordinates = (int)(reqImageWidthMM * colCoordinatesPerMM);
|
||||
colClientAnchorDetail = new ClientAnchorDetail(colNumber,
|
||||
colNumber, pictureWidthCoordinates);
|
||||
}
|
||||
return(colClientAnchorDetail);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the sheet's row should be re-sized to accomodate
|
||||
* the image, adjusts the rows height if necessary and creates then
|
||||
* returns a ClientAnchorDetail object that facilitates construction of
|
||||
* an HSSFClientAnchor that will fix the image on the sheet and establish
|
||||
* it's size.
|
||||
*
|
||||
* @param sheet A reference to the sheet that will 'contain' the image.
|
||||
* @param rowNumber A primtive int that contains the index number of a
|
||||
* row on the sheet.
|
||||
* @param reqImageHeightMM A primtive double that contains the required
|
||||
* height of the image in millimetres
|
||||
* @param resizeBehaviour A primitve int whose value will indicate how the
|
||||
* height of the row should be adjusted if the
|
||||
* required height of the image is greater than the
|
||||
* height of the row.
|
||||
* @return An instance of the ClientAnchorDetail class that will contain
|
||||
* the index number of the row containing the cell whose top
|
||||
* left hand corner also defines the top left hand corner of the
|
||||
* image, the index number of the row containing the cell whose
|
||||
* top left hand corner also defines the bottom right hand
|
||||
* corner of the image and an inset that determines how far the
|
||||
* bottom edge of the image can protrude into the next (lower)
|
||||
* row - expressed as a specific number of co-ordinate positions.
|
||||
*/
|
||||
private ClientAnchorDetail fitImageToRows(HSSFSheet sheet, int rowNumber,
|
||||
double reqImageHeightMM, int resizeBehaviour) {
|
||||
HSSFRow row = null;
|
||||
double rowHeightMM = 0.0D;
|
||||
double rowCoordinatesPerMM = 0.0D;
|
||||
int pictureHeightCoordinates = 0;
|
||||
ClientAnchorDetail rowClientAnchorDetail = null;
|
||||
|
||||
// Get the row and it's height
|
||||
row = sheet.getRow(rowNumber);
|
||||
if(row == null) {
|
||||
// Create row if it does not exist.
|
||||
row = sheet.createRow(rowNumber);
|
||||
}
|
||||
|
||||
// Get the row's height in millimetres
|
||||
rowHeightMM = row.getHeightInPoints() / ConvertImageUnits.POINTS_PER_MILLIMETRE;
|
||||
|
||||
// Check that the row's height will accomodate the image at the required
|
||||
// dimensions. If the height of the row is LESS than the required height
|
||||
// of the image, decide how the application should respond - resize the
|
||||
// row or overlay the image across a series of rows.
|
||||
if(rowHeightMM < reqImageHeightMM) {
|
||||
if((resizeBehaviour == AddDimensionedImage.EXPAND_ROW) ||
|
||||
(resizeBehaviour == AddDimensionedImage.EXPAND_ROW_AND_COLUMN)) {
|
||||
row.setHeightInPoints((float)(reqImageHeightMM *
|
||||
ConvertImageUnits.POINTS_PER_MILLIMETRE));
|
||||
rowHeightMM = reqImageHeightMM;
|
||||
rowCoordinatesPerMM = ConvertImageUnits.TOTAL_ROW_COORDINATE_POSITIONS /
|
||||
rowHeightMM;
|
||||
pictureHeightCoordinates = (int)(reqImageHeightMM * rowCoordinatesPerMM);
|
||||
rowClientAnchorDetail = new ClientAnchorDetail(rowNumber,
|
||||
rowNumber, pictureHeightCoordinates);
|
||||
}
|
||||
// If the user has chosen to overlay both rows and columns or just
|
||||
// to expand ONLY the size of the columns, then calculate how to lay
|
||||
// the image out ver one or more rows.
|
||||
else if((resizeBehaviour == AddDimensionedImage.OVERLAY_ROW_AND_COLUMN) ||
|
||||
(resizeBehaviour == AddDimensionedImage.EXPAND_COLUMN)) {
|
||||
rowClientAnchorDetail = this.calculateRowLocation(sheet,
|
||||
rowNumber, reqImageHeightMM);
|
||||
}
|
||||
}
|
||||
// Else, if the image is smaller than the space available
|
||||
else {
|
||||
rowCoordinatesPerMM = ConvertImageUnits.TOTAL_ROW_COORDINATE_POSITIONS /
|
||||
rowHeightMM;
|
||||
pictureHeightCoordinates = (int)(reqImageHeightMM * rowCoordinatesPerMM);
|
||||
rowClientAnchorDetail = new ClientAnchorDetail(rowNumber,
|
||||
rowNumber, pictureHeightCoordinates);
|
||||
}
|
||||
return(rowClientAnchorDetail);
|
||||
}
|
||||
|
||||
/**
|
||||
* If the image is to overlie more than one column, calculations need to be
|
||||
* performed to determine how many columns and whether the image will
|
||||
* overlie just a part of one column in order to be presented at the
|
||||
* required size.
|
||||
*
|
||||
* @param sheet The sheet that will 'contain' the image.
|
||||
* @param startingColumn A primitive int whose value is the index of the
|
||||
* column that contains the cell whose top left hand
|
||||
* corner should be aligned with the top left hand
|
||||
* corner of the image.
|
||||
* @param reqImageWidthMM A primitive double whose value will indicate the
|
||||
* required width of the image in millimetres.
|
||||
* @return An instance of the ClientAnchorDetail class that will contain
|
||||
* the index number of the column containing the cell whose top
|
||||
* left hand corner also defines the top left hand corner of the
|
||||
* image, the index number column containing the cell whose top
|
||||
* left hand corner also defines the bottom right hand corner of
|
||||
* the image and an inset that determines how far the right hand
|
||||
* edge of the image can protrude into the next column - expressed
|
||||
* as a specific number of co-ordinate positions.
|
||||
*/
|
||||
private ClientAnchorDetail calculateColumnLocation(HSSFSheet sheet,
|
||||
int startingColumn,
|
||||
double reqImageWidthMM) {
|
||||
ClientAnchorDetail anchorDetail = null;
|
||||
double totalWidthMM = 0.0D;
|
||||
double colWidthMM = 0.0D;
|
||||
double overlapMM = 0.0D;
|
||||
double coordinatePositionsPerMM = 0.0D;
|
||||
int toColumn = startingColumn;
|
||||
int inset = 0;
|
||||
|
||||
// Calculate how many columns the image will have to
|
||||
// span in order to be presented at the required size.
|
||||
while(totalWidthMM < reqImageWidthMM) {
|
||||
colWidthMM = ConvertImageUnits.widthUnits2Millimetres(
|
||||
(short)(sheet.getColumnWidth(toColumn)));
|
||||
// Note use of the cell border width constant. Testing with an image
|
||||
// declared to fit exactly into one column demonstrated that it's
|
||||
// width was greater than the width of the column the POI returned.
|
||||
// Further, this difference was a constant value that I am assuming
|
||||
// related to the cell's borders. Either way, that difference needs
|
||||
// to be allowed for in this calculation.
|
||||
totalWidthMM += (colWidthMM + ConvertImageUnits.CELL_BORDER_WIDTH_MILLIMETRES);
|
||||
toColumn++;
|
||||
}
|
||||
// De-crement by one the last column value.
|
||||
toColumn--;
|
||||
// Highly unlikely that this will be true but, if the width of a series
|
||||
// of columns is exactly equal to the required width of the image, then
|
||||
// simply build a ClientAnchorDetail object with an inset equal to the
|
||||
// total number of co-ordinate positions available in a column, a
|
||||
// from column co-ordinate (top left hand corner) equal to the value
|
||||
// of the startingColumn parameter and a to column co-ordinate equal
|
||||
// to the toColumn variable.
|
||||
//
|
||||
// Convert both values to ints to perform the test.
|
||||
if((int)totalWidthMM == (int)reqImageWidthMM) {
|
||||
// A problem could occur if the image is sized to fit into one or
|
||||
// more columns. If that occurs, the value in the toColumn variable
|
||||
// will be in error. To overcome this, there are two options, to
|
||||
// ibcrement the toColumn variable's value by one or to pass the
|
||||
// total number of co-ordinate positions to the third paramater
|
||||
// of the ClientAnchorDetail constructor. For no sepcific reason,
|
||||
// the latter option is used below.
|
||||
anchorDetail = new ClientAnchorDetail(startingColumn,
|
||||
toColumn, ConvertImageUnits.TOTAL_COLUMN_COORDINATE_POSITIONS);
|
||||
}
|
||||
// In this case, the image will overlap part of another column and it is
|
||||
// necessary to calculate just how much - this will become the inset
|
||||
// for the ClientAnchorDetail object.
|
||||
else {
|
||||
// Firstly, claculate how much of the image should overlap into
|
||||
// the next column.
|
||||
overlapMM = reqImageWidthMM - (totalWidthMM - colWidthMM);
|
||||
|
||||
// When the required size is very close indded to the column size,
|
||||
// the calcaulation above can produce a negative value. To prevent
|
||||
// problems occuring in later caculations, this is simply removed
|
||||
// be setting the overlapMM value to zero.
|
||||
if(overlapMM < 0) {
|
||||
overlapMM = 0.0D;
|
||||
}
|
||||
|
||||
// Next, from the columns width, calculate how many co-ordinate
|
||||
// positons there are per millimetre
|
||||
coordinatePositionsPerMM = ConvertImageUnits.TOTAL_COLUMN_COORDINATE_POSITIONS /
|
||||
colWidthMM;
|
||||
// From this figure, determine how many co-ordinat positions to
|
||||
// inset the left hand or bottom edge of the image.
|
||||
inset = (int)(coordinatePositionsPerMM * overlapMM);
|
||||
|
||||
// Now create the ClientAnchorDetail object, setting the from and to
|
||||
// columns and the inset.
|
||||
anchorDetail = new ClientAnchorDetail(startingColumn, toColumn, inset);
|
||||
}
|
||||
return(anchorDetail);
|
||||
}
|
||||
|
||||
/**
|
||||
* If the image is to overlie more than one rows, calculations need to be
|
||||
* performed to determine how many rows and whether the image will
|
||||
* overlie just a part of one row in order to be presented at the
|
||||
* required size.
|
||||
*
|
||||
* @param sheet The sheet that will 'contain' the image.
|
||||
* @param startingRow A primitive int whose value is the index of the row
|
||||
* that contains the cell whose top left hand corner
|
||||
* should be aligned with the top left hand corner of
|
||||
* the image.
|
||||
* @param reqImageHeightMM A primitive double whose value will indicate the
|
||||
* required height of the image in millimetres.
|
||||
* @return An instance of the ClientAnchorDetail class that will contain
|
||||
* the index number of the row containing the cell whose top
|
||||
* left hand corner also defines the top left hand corner of the
|
||||
* image, the index number of the row containing the cell whose top
|
||||
* left hand corner also defines the bottom right hand corner of
|
||||
* the image and an inset that determines how far the bottom edge
|
||||
* can protrude into the next (lower) row - expressed as a specific
|
||||
* number of co-ordinate positions.
|
||||
*/
|
||||
private ClientAnchorDetail calculateRowLocation(HSSFSheet sheet,
|
||||
int startingRow, double reqImageHeightMM) {
|
||||
ClientAnchorDetail clientAnchorDetail = null;
|
||||
HSSFRow row = null;
|
||||
double rowHeightMM = 0.0D;
|
||||
double totalRowHeightMM = 0.0D;
|
||||
double overlapMM = 0.0D;
|
||||
double rowCoordinatesPerMM = 0.0D;
|
||||
int toRow = startingRow;
|
||||
int inset = 0;
|
||||
|
||||
// Step through the rows in the sheet and accumulate a total of their
|
||||
// heights.
|
||||
while(totalRowHeightMM < reqImageHeightMM) {
|
||||
row = sheet.getRow(toRow);
|
||||
// Note, if the row does not already exist on the sheet then create
|
||||
// it here.
|
||||
if(row == null) {
|
||||
row = sheet.createRow(toRow);
|
||||
}
|
||||
// Get the row's height in millimetres and add to the running total.
|
||||
rowHeightMM = row.getHeightInPoints() /
|
||||
ConvertImageUnits.POINTS_PER_MILLIMETRE;
|
||||
totalRowHeightMM += rowHeightMM;
|
||||
toRow++;
|
||||
}
|
||||
// Owing to the way the loop above works, the rowNumber will have been
|
||||
// incremented one row too far. Undo that here.
|
||||
toRow--;
|
||||
// Check to see whether the image should occupy an exact number of
|
||||
// rows. If so, build the ClientAnchorDetail record to point
|
||||
// to those rows and with an inset of the total number of co-ordinate
|
||||
// position in the row.
|
||||
//
|
||||
// To overcome problems that can occur with comparing double values for
|
||||
// equality, cast both to int(s) to truncate the value; VERY crude and
|
||||
// I do not really like it!!
|
||||
if((int)totalRowHeightMM == (int)reqImageHeightMM) {
|
||||
clientAnchorDetail = new ClientAnchorDetail(startingRow, toRow,
|
||||
ConvertImageUnits.TOTAL_ROW_COORDINATE_POSITIONS);
|
||||
}
|
||||
else {
|
||||
// Calculate how far the image will project into the next row. Note
|
||||
// that the height of the last row assessed is subtracted from the
|
||||
// total height of all rows assessed so far.
|
||||
overlapMM = reqImageHeightMM - (totalRowHeightMM - rowHeightMM);
|
||||
|
||||
// To prevent an exception being thrown when the required width of
|
||||
// the image is very close indeed to the column size.
|
||||
if(overlapMM < 0) {
|
||||
overlapMM = 0.0D;
|
||||
}
|
||||
|
||||
rowCoordinatesPerMM = ConvertImageUnits.TOTAL_ROW_COORDINATE_POSITIONS /
|
||||
rowHeightMM;
|
||||
inset = (int)(overlapMM * rowCoordinatesPerMM);
|
||||
clientAnchorDetail = new ClientAnchorDetail(startingRow,
|
||||
toRow, inset);
|
||||
}
|
||||
return(clientAnchorDetail);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads - reads in and converts into an array of byte(s) - an image from
|
||||
* a named file.
|
||||
*
|
||||
* Note: this method should be modified so that the type of the image may
|
||||
* also be passed to it. Currently, it assumes that all images are
|
||||
* JPG/JPEG(s).
|
||||
*
|
||||
* @param imageFilename A String that encapsulates the path to and name
|
||||
* of the file that contains the image which is to be
|
||||
* 'loaded'.
|
||||
* @return An array of type byte that contains the raw data of the named
|
||||
* image.
|
||||
* @throws java.io.FileNotFoundException Thrown if it was not possible to
|
||||
* open the specified file.
|
||||
* @throws java.io.IOException Thrown if reading the file failed or was
|
||||
* interrupted.
|
||||
*/
|
||||
private byte[] imageToBytes(String imageFilename) throws IOException {
|
||||
File imageFile = null;
|
||||
FileInputStream fis = null;
|
||||
ByteArrayOutputStream bos = null;
|
||||
int read = 0;
|
||||
try {
|
||||
imageFile = new File(imageFilename);
|
||||
fis = new FileInputStream(imageFile);
|
||||
bos = new ByteArrayOutputStream();
|
||||
while((read = fis.read()) != -1) {
|
||||
bos.write(read);
|
||||
}
|
||||
return(bos.toByteArray());
|
||||
}
|
||||
finally {
|
||||
if(fis != null) {
|
||||
try {
|
||||
fis.close();
|
||||
fis = null;
|
||||
}
|
||||
catch(IOException ioEx) {
|
||||
// Nothing to do here
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The main entry point to the program. It contains code that demonstrates
|
||||
* one way to use the program.
|
||||
*
|
||||
* Note, the code is not restricted to use on new workbooks only. If an
|
||||
* image is to be inserted into an existing workbook. just open that
|
||||
* workbook, gat a reference to a sheet and pass that;
|
||||
*
|
||||
* AddDimensionedImage addImage = new AddDimensionedImage();
|
||||
*
|
||||
* File file = new File("....... Existing Workbook .......");
|
||||
* FileInputStream fis = new FileInputStream(file);
|
||||
* HSSFWorkbook workbook = new HSSFWorkbook(fis);
|
||||
* HSSFSheet sheet = workbook.getSheetAt(0);
|
||||
* addImage.addImageToSheet("C3", sheet, "image.jpg", 30, 20,
|
||||
* AddDimensionedImage.EXPAND.ROW);
|
||||
*
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
String imageFile = null;
|
||||
String outputFile = null;
|
||||
FileOutputStream fos = null;
|
||||
HSSFSheet sheet = null;
|
||||
try {
|
||||
if(args.length < 2){
|
||||
System.err.println("Usage: AddDimensionedImage imageFile outputFile");
|
||||
return;
|
||||
}
|
||||
imageFile = args[0];
|
||||
outputFile = args[1];
|
||||
|
||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
||||
sheet = workbook.createSheet("Picture Test");
|
||||
new AddDimensionedImage().addImageToSheet("A1", sheet,
|
||||
imageFile, 125, 125,
|
||||
AddDimensionedImage.EXPAND_ROW_AND_COLUMN);
|
||||
fos = new FileOutputStream(outputFile);
|
||||
workbook.write(fos);
|
||||
workbook.close();
|
||||
}
|
||||
catch(FileNotFoundException fnfEx) {
|
||||
System.out.println("Caught an: " + fnfEx.getClass().getName());
|
||||
System.out.println("Message: " + fnfEx.getMessage());
|
||||
System.out.println("Stacktrace follows...........");
|
||||
fnfEx.printStackTrace(System.out);
|
||||
}
|
||||
catch(IOException ioEx) {
|
||||
System.out.println("Caught an: " + ioEx.getClass().getName());
|
||||
System.out.println("Message: " + ioEx.getMessage());
|
||||
System.out.println("Stacktrace follows...........");
|
||||
ioEx.printStackTrace(System.out);
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
if(fos != null) {
|
||||
fos.close();
|
||||
fos = null;
|
||||
}
|
||||
} catch(IOException ioEx) {
|
||||
// I G N O R E
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The HSSFClientAnchor class accepts eight parameters. In order, these are;
|
||||
*
|
||||
* * How far the left hand edge of the image is inset from the left hand
|
||||
* edge of the cell
|
||||
* * How far the top edge of the image is inset from the top of the cell
|
||||
* * How far the right hand edge of the image is inset from the left
|
||||
* hand edge of the cell
|
||||
* * How far the bottom edge of the image is inset from the top of the
|
||||
* cell.
|
||||
* * Together, parameters five and six determine the column and row
|
||||
* co-ordinates of the cell whose top left hand corner will be aligned
|
||||
* with the image's top left hand corner.
|
||||
* * Together, parameter seven and eight determine the column and row
|
||||
* co-ordinates of the cell whose top left hand corner will be aligned
|
||||
* with the images bottom right hand corner.
|
||||
*
|
||||
* An instance of the ClientAnchorDetail class provides three of the eight
|
||||
* parameters, one of the co-ordinates for the images top left hand corner,
|
||||
* one of the co-ordinates for the images bottom right hand corner and
|
||||
* either how far the image should be inset from the top or the left hand
|
||||
* edge of the cell.
|
||||
*
|
||||
* @author Mark Beardsley [mas at apache.org]
|
||||
* @version 1.00 5th August 2009.
|
||||
*/
|
||||
public class ClientAnchorDetail {
|
||||
|
||||
public int fromIndex = 0;
|
||||
public int toIndex = 0;
|
||||
public int inset = 0;
|
||||
|
||||
/**
|
||||
* Create a new instance of the ClientAnchorDetail class using the
|
||||
* following parameters.
|
||||
*
|
||||
* @param fromIndex A primitive int that contains one of the
|
||||
* co-ordinates (row or column index) for the top left
|
||||
* hand corner of the image.
|
||||
* @param toIndex A primitive int that contains one of the
|
||||
* co-ordinates (row or column index) for the bottom
|
||||
* right hand corner of the image.
|
||||
* @param inset A primitive int that contains a value which indicates
|
||||
* how far the image should be inset from the top or the
|
||||
* left hand edge of a cell.
|
||||
*/
|
||||
public ClientAnchorDetail(int fromIndex, int toIndex, int inset) {
|
||||
this.fromIndex = fromIndex;
|
||||
this.toIndex = toIndex;
|
||||
this.inset = inset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get one of the number of the column or row that contains the cell
|
||||
* whose top left hand corner will be aligned with the top left hand
|
||||
* corner of the image.
|
||||
*
|
||||
* @return The value - row or column index - for one of the co-ordinates
|
||||
* of the top left hand corner of the image.
|
||||
*/
|
||||
public int getFromIndex() {
|
||||
return(this.fromIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get one of the number of the column or row that contains the cell
|
||||
* whose top left hand corner will be aligned with the bottom righ hand
|
||||
* corner of the image.
|
||||
*
|
||||
* @return The value - row or column index - for one of the co-ordinates
|
||||
* of the bottom right hand corner of the image.
|
||||
*/
|
||||
public int getToIndex() {
|
||||
return(this.toIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the image's offset from the edge of a cell.
|
||||
*
|
||||
* @return How far either the right hand or bottom edge of the image is
|
||||
* inset from the left hand or top edge of a cell.
|
||||
*/
|
||||
public int getInset() {
|
||||
return(this.inset);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility methods used to convert Excel's character based column and row
|
||||
* size measurements into pixels and/or millimetres. The class also contains
|
||||
* various constants that are required in other calculations.
|
||||
*
|
||||
* @author xio[darjino@hotmail.com]
|
||||
* @version 1.01 30th July 2009.
|
||||
* Added by Mark Beardsley [msb at apache.org].
|
||||
* Additional constants.
|
||||
* widthUnits2Millimetres() and millimetres2Units() methods.
|
||||
*/
|
||||
public static class ConvertImageUnits {
|
||||
|
||||
// Each cell conatins a fixed number of co-ordinate points; this number
|
||||
// does not vary with row height or column width or with font. These two
|
||||
// constants are defined below.
|
||||
public static final int TOTAL_COLUMN_COORDINATE_POSITIONS = 1023; // MB
|
||||
public static final int TOTAL_ROW_COORDINATE_POSITIONS = 255; // MB
|
||||
// The resoultion of an image can be expressed as a specific number
|
||||
// of pixels per inch. Displays and printers differ but 96 pixels per
|
||||
// inch is an acceptable standard to beging with.
|
||||
public static final int PIXELS_PER_INCH = 96; // MB
|
||||
// Cnstants that defines how many pixels and points there are in a
|
||||
// millimetre. These values are required for the conversion algorithm.
|
||||
public static final double PIXELS_PER_MILLIMETRES = 3.78; // MB
|
||||
public static final double POINTS_PER_MILLIMETRE = 2.83; // MB
|
||||
// The column width returned by HSSF and the width of a picture when
|
||||
// positioned to exactly cover one cell are different by almost exactly
|
||||
// 2mm - give or take rounding errors. This constant allows that
|
||||
// additional amount to be accounted for when calculating how many
|
||||
// celles the image ought to overlie.
|
||||
public static final double CELL_BORDER_WIDTH_MILLIMETRES = 2.0D; // MB
|
||||
public static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
|
||||
public static final int UNIT_OFFSET_LENGTH = 7;
|
||||
public static final int[] UNIT_OFFSET_MAP = new int[]
|
||||
{ 0, 36, 73, 109, 146, 182, 219 };
|
||||
|
||||
/**
|
||||
* pixel units to excel width units(units of 1/256th of a character width)
|
||||
* @param pxs
|
||||
* @return
|
||||
*/
|
||||
public static short pixel2WidthUnits(int pxs) {
|
||||
short widthUnits = (short) (EXCEL_COLUMN_WIDTH_FACTOR *
|
||||
(pxs / UNIT_OFFSET_LENGTH));
|
||||
widthUnits += UNIT_OFFSET_MAP[(pxs % UNIT_OFFSET_LENGTH)];
|
||||
return widthUnits;
|
||||
}
|
||||
|
||||
/**
|
||||
* excel width units(units of 1/256th of a character width) to pixel
|
||||
* units.
|
||||
*
|
||||
* @param widthUnits
|
||||
* @return
|
||||
*/
|
||||
public static int widthUnits2Pixel(short widthUnits) {
|
||||
int pixels = (widthUnits / EXCEL_COLUMN_WIDTH_FACTOR)
|
||||
* UNIT_OFFSET_LENGTH;
|
||||
int offsetWidthUnits = widthUnits % EXCEL_COLUMN_WIDTH_FACTOR;
|
||||
pixels += Math.round(offsetWidthUnits /
|
||||
((float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH));
|
||||
return pixels;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert Excel's width units into millimetres.
|
||||
*
|
||||
* @param widthUnits The width of the column or the height of the
|
||||
* row in Excel's units.
|
||||
* @return A primitive double that contains the columns width or rows
|
||||
* height in millimetres.
|
||||
*/
|
||||
public static double widthUnits2Millimetres(short widthUnits) {
|
||||
return(ConvertImageUnits.widthUnits2Pixel(widthUnits) /
|
||||
ConvertImageUnits.PIXELS_PER_MILLIMETRES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert into millimetres Excel's width units..
|
||||
*
|
||||
* @param millimetres A primitive double that contains the columns
|
||||
* width or rows height in millimetres.
|
||||
* @return A primitive int that contains the columns width or rows
|
||||
* height in Excel's units.
|
||||
*/
|
||||
public static int millimetres2WidthUnits(double millimetres) {
|
||||
return(ConvertImageUnits.pixel2WidthUnits((int)(millimetres *
|
||||
ConvertImageUnits.PIXELS_PER_MILLIMETRES)));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
|
||||
/**
|
||||
* Shows how various alignment options work.
|
||||
*
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
*/
|
||||
public class Alignment {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
HSSFRow row = sheet.createRow(2);
|
||||
createCell(wb, row, 0, HorizontalAlignment.CENTER);
|
||||
createCell(wb, row, 1, HorizontalAlignment.CENTER_SELECTION);
|
||||
createCell(wb, row, 2, HorizontalAlignment.FILL);
|
||||
createCell(wb, row, 3, HorizontalAlignment.GENERAL);
|
||||
createCell(wb, row, 4, HorizontalAlignment.JUSTIFY);
|
||||
createCell(wb, row, 5, HorizontalAlignment.LEFT);
|
||||
createCell(wb, row, 6, HorizontalAlignment.RIGHT);
|
||||
|
||||
// Write the output to a file
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
|
||||
wb.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a cell and aligns it a certain way.
|
||||
*
|
||||
* @param wb the workbook
|
||||
* @param row the row to create the cell in
|
||||
* @param column the column number to create the cell in
|
||||
* @param align the alignment for the cell.
|
||||
*/
|
||||
private static void createCell(HSSFWorkbook wb, HSSFRow row, int column, HorizontalAlignment align) {
|
||||
HSSFCell cell = row.createCell(column);
|
||||
cell.setCellValue("Align It");
|
||||
HSSFCellStyle cellStyle = wb.createCellStyle();
|
||||
cellStyle.setAlignment(align);
|
||||
cell.setCellStyle(cellStyle);
|
||||
}
|
||||
}
|
@ -1,175 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
|
||||
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
|
||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||
import org.apache.poi.ss.usermodel.FillPatternType;
|
||||
|
||||
/**
|
||||
* Demonstrates many features of the user API at once. Used in the HOW-TO guide.
|
||||
*/
|
||||
public class BigExample {
|
||||
public static void main(String[] args) throws IOException {
|
||||
int rownum;
|
||||
|
||||
// create a new file
|
||||
FileOutputStream out = new FileOutputStream("workbook.xls");
|
||||
// create a new workbook
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
// create a new sheet
|
||||
HSSFSheet s = wb.createSheet();
|
||||
// declare a row object reference
|
||||
HSSFRow r = null;
|
||||
// declare a cell object reference
|
||||
HSSFCell c = null;
|
||||
// create 3 cell styles
|
||||
HSSFCellStyle cs = wb.createCellStyle();
|
||||
HSSFCellStyle cs2 = wb.createCellStyle();
|
||||
HSSFCellStyle cs3 = wb.createCellStyle();
|
||||
// create 2 fonts objects
|
||||
HSSFFont f = wb.createFont();
|
||||
HSSFFont f2 = wb.createFont();
|
||||
|
||||
//set font 1 to 12 point type
|
||||
f.setFontHeightInPoints((short) 12);
|
||||
//make it red
|
||||
f.setColor(HSSFColorPredefined.RED.getIndex());
|
||||
// make it bold
|
||||
//arial is the default font
|
||||
f.setBold(true);
|
||||
|
||||
//set font 2 to 10 point type
|
||||
f2.setFontHeightInPoints((short) 10);
|
||||
//make it the color at palette index 0xf (white)
|
||||
f2.setColor(HSSFColorPredefined.WHITE.getIndex());
|
||||
//make it bold
|
||||
f2.setBold(true);
|
||||
|
||||
//set cell stlye
|
||||
cs.setFont(f);
|
||||
//set the cell format see HSSFDataFromat for a full list
|
||||
cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
|
||||
|
||||
//set a thin border
|
||||
cs2.setBorderBottom(BorderStyle.THIN);
|
||||
//fill w fg fill color
|
||||
cs2.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
// set foreground fill to red
|
||||
cs2.setFillForegroundColor(HSSFColorPredefined.RED.getIndex());
|
||||
|
||||
// set the font
|
||||
cs2.setFont(f2);
|
||||
|
||||
// set the sheet name to HSSF Test
|
||||
wb.setSheetName(0, "HSSF Test");
|
||||
// create a sheet with 300 rows (0-299)
|
||||
for (rownum = 0; rownum < 300; rownum++)
|
||||
{
|
||||
// create a row
|
||||
r = s.createRow(rownum);
|
||||
// on every other row
|
||||
if ((rownum % 2) == 0)
|
||||
{
|
||||
// make the row height bigger (in twips - 1/20 of a point)
|
||||
r.setHeight((short) 0x249);
|
||||
}
|
||||
|
||||
//r.setRowNum(( short ) rownum);
|
||||
// create 50 cells (0-49) (the += 2 becomes apparent later
|
||||
for (int cellnum = 0; cellnum < 50; cellnum += 2)
|
||||
{
|
||||
// create a numeric cell
|
||||
c = r.createCell(cellnum);
|
||||
// do some goofy math to demonstrate decimals
|
||||
c.setCellValue(rownum * 10000 + cellnum
|
||||
+ (((double) rownum / 1000)
|
||||
+ ((double) cellnum / 10000)));
|
||||
|
||||
// on every other row
|
||||
if ((rownum % 2) == 0)
|
||||
{
|
||||
// set this cell to the first cell style we defined
|
||||
c.setCellStyle(cs);
|
||||
}
|
||||
|
||||
// create a string cell (see why += 2 in the
|
||||
c = r.createCell(cellnum + 1);
|
||||
|
||||
// set the cell's string value to "TEST"
|
||||
c.setCellValue("TEST");
|
||||
// make this column a bit wider
|
||||
s.setColumnWidth(cellnum + 1, (int)((50 * 8) / ((double) 1 / 20)));
|
||||
|
||||
// on every other row
|
||||
if ((rownum % 2) == 0)
|
||||
{
|
||||
// set this to the white on red cell style
|
||||
// we defined above
|
||||
c.setCellStyle(cs2);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//draw a thick black border on the row at the bottom using BLANKS
|
||||
// advance 2 rows
|
||||
rownum++;
|
||||
rownum++;
|
||||
|
||||
r = s.createRow(rownum);
|
||||
|
||||
// define the third style to be the default
|
||||
// except with a thick black border at the bottom
|
||||
cs3.setBorderBottom(BorderStyle.THICK);
|
||||
|
||||
//create 50 cells
|
||||
for (int cellnum =0; cellnum < 50; cellnum++) {
|
||||
//create a blank type cell (no value)
|
||||
c = r.createCell(cellnum);
|
||||
// set it to the thick black border style
|
||||
c.setCellStyle(cs3);
|
||||
}
|
||||
|
||||
//end draw thick black border
|
||||
|
||||
|
||||
// demonstrate adding/naming and deleting a sheet
|
||||
// create a sheet, set its title then delete it
|
||||
wb.createSheet();
|
||||
wb.setSheetName(1, "DeletedSheet");
|
||||
wb.removeSheetAt(1);
|
||||
//end deleted sheet
|
||||
|
||||
// write the workbook to the output stream
|
||||
// close our file (don't blow out our file handles
|
||||
wb.write(out);
|
||||
out.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
|
||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||
|
||||
/**
|
||||
* Demonstrates how to create borders around cells.
|
||||
*/
|
||||
public class Borders {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
|
||||
// Create a row and put some cells in it. Rows are 0 based.
|
||||
HSSFRow row = sheet.createRow(1);
|
||||
|
||||
// Create a cell and put a value in it.
|
||||
HSSFCell cell = row.createCell(1);
|
||||
cell.setCellValue(4);
|
||||
|
||||
// Style the cell with borders all around.
|
||||
HSSFCellStyle style = wb.createCellStyle();
|
||||
style.setBorderBottom(BorderStyle.THIN);
|
||||
style.setBottomBorderColor(HSSFColorPredefined.BLACK.getIndex());
|
||||
style.setBorderLeft(BorderStyle.THIN);
|
||||
style.setLeftBorderColor(HSSFColorPredefined.GREEN.getIndex());
|
||||
style.setBorderRight(BorderStyle.THIN);
|
||||
style.setRightBorderColor(HSSFColorPredefined.BLUE.getIndex());
|
||||
style.setBorderTop(BorderStyle.MEDIUM_DASHED);
|
||||
style.setTopBorderColor(HSSFColorPredefined.ORANGE.getIndex());
|
||||
cell.setCellStyle(style);
|
||||
|
||||
// Write the output to a file
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,106 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
|
||||
import org.apache.poi.hssf.usermodel.HSSFComment;
|
||||
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
|
||||
|
||||
/**
|
||||
* Demonstrates how to work with excel cell comments.
|
||||
*
|
||||
* <p>
|
||||
* Excel comment is a kind of a text shape,
|
||||
* so inserting a comment is very similar to placing a text box in a worksheet
|
||||
* </p>
|
||||
*/
|
||||
public class CellComments {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("Cell comments in POI HSSF");
|
||||
|
||||
// Create the drawing patriarch. This is the top level container for all shapes including cell comments.
|
||||
HSSFPatriarch patr = sheet.createDrawingPatriarch();
|
||||
|
||||
//create a cell in row 3
|
||||
HSSFCell cell1 = sheet.createRow(3).createCell(1);
|
||||
cell1.setCellValue(new HSSFRichTextString("Hello, World"));
|
||||
|
||||
//anchor defines size and position of the comment in worksheet
|
||||
HSSFComment comment1 = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short) 6, 5));
|
||||
|
||||
// set text in the comment
|
||||
comment1.setString(new HSSFRichTextString("We can set comments in POI"));
|
||||
|
||||
//set comment author.
|
||||
//you can see it in the status bar when moving mouse over the commented cell
|
||||
comment1.setAuthor("Apache Software Foundation");
|
||||
|
||||
// The first way to assign comment to a cell is via HSSFCell.setCellComment method
|
||||
cell1.setCellComment(comment1);
|
||||
|
||||
//create another cell in row 6
|
||||
HSSFCell cell2 = sheet.createRow(6).createCell(1);
|
||||
cell2.setCellValue(36.6);
|
||||
|
||||
|
||||
HSSFComment comment2 = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short)4, 8, (short) 6, 11));
|
||||
//modify background color of the comment
|
||||
comment2.setFillColor(204, 236, 255);
|
||||
|
||||
HSSFRichTextString string = new HSSFRichTextString("Normal body temperature");
|
||||
|
||||
//apply custom font to the text in the comment
|
||||
HSSFFont font = wb.createFont();
|
||||
font.setFontName("Arial");
|
||||
font.setFontHeightInPoints((short)10);
|
||||
font.setBold(true);
|
||||
font.setColor(HSSFColorPredefined.RED.getIndex());
|
||||
string.applyFont(font);
|
||||
|
||||
comment2.setString(string);
|
||||
comment2.setVisible(true); //by default comments are hidden. This one is always visible.
|
||||
|
||||
comment2.setAuthor("Bill Gates");
|
||||
|
||||
/**
|
||||
* The second way to assign comment to a cell is to implicitly specify its row and column.
|
||||
* Note, it is possible to set row and column of a non-existing cell.
|
||||
* It works, the comment is visible.
|
||||
*/
|
||||
comment2.setRow(6);
|
||||
comment2.setColumn(1);
|
||||
|
||||
FileOutputStream out = new FileOutputStream("poi_comment.xls");
|
||||
wb.write(out);
|
||||
out.close();
|
||||
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.CellType;
|
||||
|
||||
public class CellTypes {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
HSSFRow row = sheet.createRow(2);
|
||||
row.createCell(0).setCellValue(1.1);
|
||||
row.createCell(1).setCellValue(new Date());
|
||||
row.createCell(2).setCellValue("a string");
|
||||
row.createCell(3).setCellValue(true);
|
||||
row.createCell(4).setCellType(CellType.ERROR);
|
||||
|
||||
// Write the output to a file
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Illustrates how to create cell values.
|
||||
*
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
*/
|
||||
public class CreateCells {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
|
||||
// Create a row and put some cells in it. Rows are 0 based.
|
||||
HSSFRow row = sheet.createRow(0);
|
||||
// Create a cell and put a value in it.
|
||||
HSSFCell cell = row.createCell(0);
|
||||
cell.setCellValue(1);
|
||||
|
||||
// Or do it on one line.
|
||||
row.createCell(1).setCellValue(1.2);
|
||||
row.createCell(2).setCellValue("This is a string");
|
||||
row.createCell(3).setCellValue(true);
|
||||
|
||||
// Write the output to a file
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
|
||||
/**
|
||||
* An example on how to cells with dates. The important thing to note
|
||||
* about dates is that they are really normal numeric cells that are
|
||||
* formatted specially.
|
||||
*/
|
||||
public class CreateDateCells {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
|
||||
// Create a row and put some cells in it. Rows are 0 based.
|
||||
HSSFRow row = sheet.createRow(0);
|
||||
|
||||
// Create a cell and put a date value in it. The first cell is not styled as a date.
|
||||
HSSFCell cell = row.createCell(0);
|
||||
cell.setCellValue(new Date());
|
||||
|
||||
// we style the second cell as a date (and time). It is important to create a new cell style from the workbook
|
||||
// otherwise you can end up modifying the built in style and effecting not only this cell but other cells.
|
||||
HSSFCellStyle cellStyle = wb.createCellStyle();
|
||||
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
|
||||
cell = row.createCell(1);
|
||||
cell.setCellValue(new Date());
|
||||
cell.setCellStyle(cellStyle);
|
||||
|
||||
// Write the output to a file
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.FileInputStream;
|
||||
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFObjectData;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hwpf.HWPFDocument;
|
||||
import org.apache.poi.poifs.filesystem.DirectoryNode;
|
||||
import org.apache.poi.poifs.filesystem.Entry;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
|
||||
/**
|
||||
* Demonstrates how you can extract embedded data from a .xls file
|
||||
*/
|
||||
public class EmbeddedObjects {
|
||||
@SuppressWarnings("unused")
|
||||
public static void main(String[] args) throws Exception {
|
||||
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(args[0]));
|
||||
HSSFWorkbook workbook = new HSSFWorkbook(fs);
|
||||
for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) {
|
||||
//the OLE2 Class Name of the object
|
||||
String oleName = obj.getOLE2ClassName();
|
||||
DirectoryNode dn = (obj.hasDirectoryEntry()) ? (DirectoryNode) obj.getDirectory() : null;
|
||||
Closeable document = null;
|
||||
if (oleName.equals("Worksheet")) {
|
||||
document = new HSSFWorkbook(dn, fs, false);
|
||||
} else if (oleName.equals("Document")) {
|
||||
document = new HWPFDocument(dn);
|
||||
} else if (oleName.equals("Presentation")) {
|
||||
document = new HSLFSlideShow(dn);
|
||||
} else {
|
||||
if(dn != null){
|
||||
// The DirectoryEntry is a DocumentNode. Examine its entries to find out what it is
|
||||
for (Entry entry : dn) {
|
||||
String name = entry.getName();
|
||||
}
|
||||
} else {
|
||||
// There is no DirectoryEntry
|
||||
// Recover the object's data from the HSSFObjectData instance.
|
||||
byte[] objectData = obj.getObjectData();
|
||||
}
|
||||
}
|
||||
if (document != null) {
|
||||
document.close();
|
||||
}
|
||||
}
|
||||
workbook.close();
|
||||
}
|
||||
}
|
@ -1,119 +0,0 @@
|
||||
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
|
||||
import org.apache.poi.hssf.eventusermodel.HSSFListener;
|
||||
import org.apache.poi.hssf.eventusermodel.HSSFRequest;
|
||||
import org.apache.poi.hssf.record.*;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* This example shows how to use the event API for reading a file.
|
||||
*/
|
||||
public class EventExample
|
||||
implements HSSFListener
|
||||
{
|
||||
private SSTRecord sstrec;
|
||||
|
||||
/**
|
||||
* This method listens for incoming records and handles them as required.
|
||||
* @param record The record that was found while reading.
|
||||
*/
|
||||
@Override
|
||||
public void processRecord(Record record)
|
||||
{
|
||||
switch (record.getSid())
|
||||
{
|
||||
// the BOFRecord can represent either the beginning of a sheet or the workbook
|
||||
case BOFRecord.sid:
|
||||
BOFRecord bof = (BOFRecord) record;
|
||||
if (bof.getType() == BOFRecord.TYPE_WORKBOOK)
|
||||
{
|
||||
System.out.println("Encountered workbook");
|
||||
// assigned to the class level member
|
||||
} else if (bof.getType() == BOFRecord.TYPE_WORKSHEET)
|
||||
{
|
||||
System.out.println("Encountered sheet reference");
|
||||
}
|
||||
break;
|
||||
case BoundSheetRecord.sid:
|
||||
BoundSheetRecord bsr = (BoundSheetRecord) record;
|
||||
System.out.println("New sheet named: " + bsr.getSheetname());
|
||||
break;
|
||||
case RowRecord.sid:
|
||||
RowRecord rowrec = (RowRecord) record;
|
||||
System.out.println("Row found, first column at "
|
||||
+ rowrec.getFirstCol() + " last column at " + rowrec.getLastCol());
|
||||
break;
|
||||
case NumberRecord.sid:
|
||||
NumberRecord numrec = (NumberRecord) record;
|
||||
System.out.println("Cell found with value " + numrec.getValue()
|
||||
+ " at row " + numrec.getRow() + " and column " + numrec.getColumn());
|
||||
break;
|
||||
// SSTRecords store a array of unique strings used in Excel.
|
||||
case SSTRecord.sid:
|
||||
sstrec = (SSTRecord) record;
|
||||
for (int k = 0; k < sstrec.getNumUniqueStrings(); k++)
|
||||
{
|
||||
System.out.println("String table value " + k + " = " + sstrec.getString(k));
|
||||
}
|
||||
break;
|
||||
case LabelSSTRecord.sid:
|
||||
LabelSSTRecord lrec = (LabelSSTRecord) record;
|
||||
System.out.println("String cell found with value "
|
||||
+ sstrec.getString(lrec.getSSTIndex()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read an excel file and spit out what we find.
|
||||
*
|
||||
* @param args Expect one argument that is the file to read.
|
||||
* @throws IOException When there is an error processing the file.
|
||||
*/
|
||||
public static void main(String[] args) throws IOException
|
||||
{
|
||||
// create a new file input stream with the input file specified
|
||||
// at the command line
|
||||
FileInputStream fin = new FileInputStream(args[0]);
|
||||
// create a new org.apache.poi.poifs.filesystem.Filesystem
|
||||
POIFSFileSystem poifs = new POIFSFileSystem(fin);
|
||||
// get the Workbook (excel part) stream in a InputStream
|
||||
InputStream din = poifs.createDocumentInputStream("Workbook");
|
||||
// construct out HSSFRequest object
|
||||
HSSFRequest req = new HSSFRequest();
|
||||
// lazy listen for ALL records with the listener shown above
|
||||
req.addListenerForAllRecords(new EventExample());
|
||||
// create our event factory
|
||||
HSSFEventFactory factory = new HSSFEventFactory();
|
||||
// process our events based on the document input stream
|
||||
factory.processEvents(req, din);
|
||||
// once all the events are processed close our file input stream
|
||||
fin.close();
|
||||
// and our document input stream (don't want to leak these!)
|
||||
din.close();
|
||||
System.out.println("done.");
|
||||
}
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
|
||||
import org.apache.poi.ss.usermodel.FillPatternType;
|
||||
|
||||
/**
|
||||
* Shows how to use various fills.
|
||||
*/
|
||||
public class FrillsAndFills {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
|
||||
// Create a row and put some cells in it. Rows are 0 based.
|
||||
HSSFRow row = sheet.createRow(1);
|
||||
|
||||
// Aqua background
|
||||
HSSFCellStyle style = wb.createCellStyle();
|
||||
style.setFillBackgroundColor(HSSFColorPredefined.AQUA.getIndex());
|
||||
style.setFillPattern(FillPatternType.BIG_SPOTS);
|
||||
HSSFCell cell = row.createCell(1);
|
||||
cell.setCellValue("X");
|
||||
cell.setCellStyle(style);
|
||||
|
||||
// Orange "foreground", foreground being the fill foreground not the font color.
|
||||
style = wb.createCellStyle();
|
||||
style.setFillForegroundColor(HSSFColorPredefined.ORANGE.getIndex());
|
||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
cell = row.createCell(2);
|
||||
cell.setCellValue("X");
|
||||
cell.setCellStyle(style);
|
||||
|
||||
// Write the output to a file
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,286 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
|
||||
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||
import org.apache.poi.ss.usermodel.FillPatternType;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
|
||||
/**
|
||||
* File for HSSF testing/examples
|
||||
*
|
||||
* THIS IS NOT THE MAIN HSSF FILE!! This is a utility for testing functionality.
|
||||
* It does contain sample API usage that may be educational to regular API
|
||||
* users.
|
||||
*/
|
||||
public final class HSSFReadWrite {
|
||||
|
||||
/**
|
||||
* creates an {@link HSSFWorkbook} with the specified OS filename.
|
||||
*/
|
||||
private static HSSFWorkbook readFile(String filename) throws IOException {
|
||||
FileInputStream fis = new FileInputStream(filename);
|
||||
try {
|
||||
return new HSSFWorkbook(fis); // NOSONAR - should not be closed here
|
||||
} finally {
|
||||
fis.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* given a filename this outputs a sample sheet with just a set of
|
||||
* rows/cells.
|
||||
*/
|
||||
private static void testCreateSampleSheet(String outputFilename) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
try {
|
||||
HSSFSheet s = wb.createSheet();
|
||||
HSSFCellStyle cs = wb.createCellStyle();
|
||||
HSSFCellStyle cs2 = wb.createCellStyle();
|
||||
HSSFCellStyle cs3 = wb.createCellStyle();
|
||||
HSSFFont f = wb.createFont();
|
||||
HSSFFont f2 = wb.createFont();
|
||||
|
||||
f.setFontHeightInPoints((short) 12);
|
||||
f.setColor((short) 0xA);
|
||||
f.setBold(true);
|
||||
f2.setFontHeightInPoints((short) 10);
|
||||
f2.setColor((short) 0xf);
|
||||
f2.setBold(true);
|
||||
cs.setFont(f);
|
||||
cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
|
||||
cs2.setBorderBottom(BorderStyle.THIN);
|
||||
cs2.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
cs2.setFillForegroundColor((short) 0xA);
|
||||
cs2.setFont(f2);
|
||||
wb.setSheetName(0, "HSSF Test");
|
||||
int rownum;
|
||||
for (rownum = 0; rownum < 300; rownum++) {
|
||||
HSSFRow r = s.createRow(rownum);
|
||||
if ((rownum % 2) == 0) {
|
||||
r.setHeight((short) 0x249);
|
||||
}
|
||||
|
||||
for (int cellnum = 0; cellnum < 50; cellnum += 2) {
|
||||
HSSFCell c = r.createCell(cellnum);
|
||||
c.setCellValue(rownum * 10000 + cellnum
|
||||
+ (((double) rownum / 1000) + ((double) cellnum / 10000)));
|
||||
if ((rownum % 2) == 0) {
|
||||
c.setCellStyle(cs);
|
||||
}
|
||||
c = r.createCell(cellnum + 1);
|
||||
c.setCellValue(new HSSFRichTextString("TEST"));
|
||||
// 50 characters divided by 1/20th of a point
|
||||
s.setColumnWidth(cellnum + 1, (int) (50 * 8 / 0.05));
|
||||
if ((rownum % 2) == 0) {
|
||||
c.setCellStyle(cs2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// draw a thick black border on the row at the bottom using BLANKS
|
||||
rownum++;
|
||||
rownum++;
|
||||
HSSFRow r = s.createRow(rownum);
|
||||
cs3.setBorderBottom(BorderStyle.THICK);
|
||||
for (int cellnum = 0; cellnum < 50; cellnum++) {
|
||||
HSSFCell c = r.createCell(cellnum);
|
||||
c.setCellStyle(cs3);
|
||||
}
|
||||
s.addMergedRegion(new CellRangeAddress(0, 3, 0, 3));
|
||||
s.addMergedRegion(new CellRangeAddress(100, 110, 100, 110));
|
||||
|
||||
// end draw thick black border
|
||||
// create a sheet, set its title then delete it
|
||||
wb.createSheet();
|
||||
wb.setSheetName(1, "DeletedSheet");
|
||||
wb.removeSheetAt(1);
|
||||
|
||||
// end deleted sheet
|
||||
FileOutputStream out = new FileOutputStream(outputFilename);
|
||||
try {
|
||||
wb.write(out);
|
||||
} finally {
|
||||
out.close();
|
||||
}
|
||||
} finally {
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method main
|
||||
*
|
||||
* Given 1 argument takes that as the filename, inputs it and dumps the
|
||||
* cell values/types out to sys.out.<br/>
|
||||
*
|
||||
* given 2 arguments where the second argument is the word "write" and the
|
||||
* first is the filename - writes out a sample (test) spreadsheet
|
||||
* see {@link HSSFReadWrite#testCreateSampleSheet(String)}.<br/>
|
||||
*
|
||||
* given 2 arguments where the first is an input filename and the second
|
||||
* an output filename (not write), attempts to fully read in the
|
||||
* spreadsheet and fully write it out.<br/>
|
||||
*
|
||||
* given 3 arguments where the first is an input filename and the second an
|
||||
* output filename (not write) and the third is "modify1", attempts to read in the
|
||||
* spreadsheet, deletes rows 0-24, 74-99. Changes cell at row 39, col 3 to
|
||||
* "MODIFIED CELL" then writes it out. Hence this is "modify test 1". If you
|
||||
* take the output from the write test, you'll have a valid scenario.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
if (args.length < 1) {
|
||||
System.err.println("At least one argument expected");
|
||||
return;
|
||||
}
|
||||
|
||||
String fileName = args[0];
|
||||
try {
|
||||
if (args.length < 2) {
|
||||
|
||||
HSSFWorkbook wb = HSSFReadWrite.readFile(fileName);
|
||||
|
||||
try {
|
||||
System.out.println("Data dump:\n");
|
||||
|
||||
for (int k = 0; k < wb.getNumberOfSheets(); k++) {
|
||||
HSSFSheet sheet = wb.getSheetAt(k);
|
||||
int rows = sheet.getPhysicalNumberOfRows();
|
||||
System.out.println("Sheet " + k + " \"" + wb.getSheetName(k) + "\" has " + rows
|
||||
+ " row(s).");
|
||||
for (int r = 0; r < rows; r++) {
|
||||
HSSFRow row = sheet.getRow(r);
|
||||
if (row == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
System.out.println("\nROW " + row.getRowNum() + " has " + row.getPhysicalNumberOfCells() + " cell(s).");
|
||||
for (int c = 0; c < row.getLastCellNum(); c++) {
|
||||
HSSFCell cell = row.getCell(c);
|
||||
String value;
|
||||
|
||||
if(cell != null) {
|
||||
switch (cell.getCellTypeEnum()) {
|
||||
|
||||
case FORMULA:
|
||||
value = "FORMULA value=" + cell.getCellFormula();
|
||||
break;
|
||||
|
||||
case NUMERIC:
|
||||
value = "NUMERIC value=" + cell.getNumericCellValue();
|
||||
break;
|
||||
|
||||
case STRING:
|
||||
value = "STRING value=" + cell.getStringCellValue();
|
||||
break;
|
||||
|
||||
case BLANK:
|
||||
value = "<BLANK>";
|
||||
break;
|
||||
|
||||
case BOOLEAN:
|
||||
value = "BOOLEAN value-" + cell.getBooleanCellValue();
|
||||
break;
|
||||
|
||||
case ERROR:
|
||||
value = "ERROR value=" + cell.getErrorCellValue();
|
||||
break;
|
||||
|
||||
default:
|
||||
value = "UNKNOWN value of type " + cell.getCellTypeEnum();
|
||||
}
|
||||
System.out.println("CELL col=" + cell.getColumnIndex() + " VALUE="
|
||||
+ value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
wb.close();
|
||||
}
|
||||
} else if (args.length == 2) {
|
||||
if (args[1].toLowerCase(Locale.ROOT).equals("write")) {
|
||||
System.out.println("Write mode");
|
||||
long time = System.currentTimeMillis();
|
||||
HSSFReadWrite.testCreateSampleSheet(fileName);
|
||||
|
||||
System.out.println("" + (System.currentTimeMillis() - time)
|
||||
+ " ms generation time");
|
||||
} else {
|
||||
System.out.println("readwrite test");
|
||||
HSSFWorkbook wb = HSSFReadWrite.readFile(fileName);
|
||||
try {
|
||||
FileOutputStream stream = new FileOutputStream(args[1]);
|
||||
try {
|
||||
wb.write(stream);
|
||||
} finally {
|
||||
stream.close();
|
||||
}
|
||||
} finally {
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
} else if (args.length == 3 && args[2].equalsIgnoreCase("modify1")) {
|
||||
// delete row 0-24, row 74 - 99 && change cell 3 on row 39 to string "MODIFIED CELL!!"
|
||||
|
||||
HSSFWorkbook wb = HSSFReadWrite.readFile(fileName);
|
||||
try {
|
||||
HSSFSheet sheet = wb.getSheetAt(0);
|
||||
|
||||
for (int k = 0; k < 25; k++) {
|
||||
HSSFRow row = sheet.getRow(k);
|
||||
|
||||
sheet.removeRow(row);
|
||||
}
|
||||
for (int k = 74; k < 100; k++) {
|
||||
HSSFRow row = sheet.getRow(k);
|
||||
|
||||
sheet.removeRow(row);
|
||||
}
|
||||
HSSFRow row = sheet.getRow(39);
|
||||
HSSFCell cell = row.getCell(3);
|
||||
cell.setCellValue("MODIFIED CELL!!!!!");
|
||||
|
||||
FileOutputStream stream = new FileOutputStream(args[1]);
|
||||
try {
|
||||
wb.write(stream);
|
||||
} finally {
|
||||
stream.close();
|
||||
}
|
||||
} finally {
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.CellType;
|
||||
|
||||
/**
|
||||
* Test if hyperlink formula, with url that got more than 127 characters, works
|
||||
*/
|
||||
public class HyperlinkFormula {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
HSSFRow row = sheet.createRow(0);
|
||||
|
||||
HSSFCell cell = row.createCell(0);
|
||||
cell.setCellType(CellType.FORMULA);
|
||||
cell.setCellFormula("HYPERLINK(\"http://127.0.0.1:8080/toto/truc/index.html?test=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", \"test\")");
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,97 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.common.usermodel.HyperlinkType;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCreationHelper;
|
||||
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||
import org.apache.poi.hssf.usermodel.HSSFHyperlink;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.util.HSSFColor.HSSFColorPredefined;
|
||||
import org.apache.poi.ss.usermodel.Font;
|
||||
|
||||
/**
|
||||
* Demonstrates how to create hyperlinks.
|
||||
*/
|
||||
public class Hyperlinks {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFCreationHelper helper = wb.getCreationHelper();
|
||||
|
||||
//cell style for hyperlinks
|
||||
//by default hyperlinks are blue and underlined
|
||||
HSSFCellStyle hlink_style = wb.createCellStyle();
|
||||
HSSFFont hlink_font = wb.createFont();
|
||||
hlink_font.setUnderline(Font.U_SINGLE);
|
||||
hlink_font.setColor(HSSFColorPredefined.BLUE.getIndex());
|
||||
hlink_style.setFont(hlink_font);
|
||||
|
||||
HSSFCell cell;
|
||||
HSSFSheet sheet = wb.createSheet("Hyperlinks");
|
||||
|
||||
//URL
|
||||
cell = sheet.createRow(0).createCell(0);
|
||||
cell.setCellValue("URL Link");
|
||||
HSSFHyperlink link = helper.createHyperlink(HyperlinkType.URL);
|
||||
link.setAddress("http://poi.apache.org/");
|
||||
cell.setHyperlink(link);
|
||||
cell.setCellStyle(hlink_style);
|
||||
|
||||
//link to a file in the current directory
|
||||
cell = sheet.createRow(1).createCell(0);
|
||||
cell.setCellValue("File Link");
|
||||
link = helper.createHyperlink(HyperlinkType.FILE);
|
||||
link.setAddress("link1.xls");
|
||||
cell.setHyperlink(link);
|
||||
cell.setCellStyle(hlink_style);
|
||||
|
||||
//e-mail link
|
||||
cell = sheet.createRow(2).createCell(0);
|
||||
cell.setCellValue("Email Link");
|
||||
link = helper.createHyperlink(HyperlinkType.EMAIL);
|
||||
//note, if subject contains white spaces, make sure they are url-encoded
|
||||
link.setAddress("mailto:poi@apache.org?subject=Hyperlinks");
|
||||
cell.setHyperlink(link);
|
||||
cell.setCellStyle(hlink_style);
|
||||
|
||||
//link to a place in this workbook
|
||||
|
||||
//create a target sheet and cell
|
||||
HSSFSheet sheet2 = wb.createSheet("Target Sheet");
|
||||
sheet2.createRow(0).createCell(0).setCellValue("Target Cell");
|
||||
|
||||
cell = sheet.createRow(3).createCell(0);
|
||||
cell.setCellValue("Worksheet Link");
|
||||
link = helper.createHyperlink(HyperlinkType.DOCUMENT);
|
||||
link.setAddress("'Target Sheet'!A1");
|
||||
cell.setHyperlink(link);
|
||||
cell.setCellStyle(hlink_style);
|
||||
|
||||
FileOutputStream out = new FileOutputStream("hssf-links.xls");
|
||||
wb.write(out);
|
||||
out.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,553 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
|
||||
|
||||
/**
|
||||
* This class contains code that demonstrates how to insert plain, numbered
|
||||
* and bulleted lists into an Excel spreadsheet cell.
|
||||
*
|
||||
* Look at the code contained in the demonstrateMethodCalls() method. It calls
|
||||
* other methods that create plain, numbered and bulleted single and
|
||||
* multi-level lists. The demonstrateMethodCalls() method appears at the top
|
||||
* of the class definition.
|
||||
*
|
||||
* Though different methods are provided to construct single and multi-level
|
||||
* plain, numbered and bulleted lists, close examination will reveal that they
|
||||
* are not strictly necessary. If the inputs to the listInCell() and
|
||||
* multilLevelListInCell() methods are constructed to include the bullet
|
||||
* character or the item numbers then these methods alone may be sufficient.
|
||||
*
|
||||
* @author Mark Beardsley [msb at apache.org]
|
||||
*/
|
||||
public class InCellLists {
|
||||
|
||||
// This character looks like a solid, black, loser case letter 'o'
|
||||
// positioned up from the base line of the text.
|
||||
private static final char BULLET_CHARACTER = '\u2022';
|
||||
|
||||
// The tab character - \t - cannot be used to create a tab space
|
||||
// within a cell as it is rendered as a square. Therefore, four
|
||||
// spaces are used to simulate that character.
|
||||
private static final String TAB = " ";
|
||||
|
||||
/**
|
||||
* Call each of the list creation methods.
|
||||
*
|
||||
* @param outputFilename A String that encapsulates the name of and path to
|
||||
* the Excel spreadsheet file this code will create.
|
||||
*/
|
||||
public void demonstrateMethodCalls(String outputFilename) throws IOException {
|
||||
HSSFWorkbook workbook = new HSSFWorkbook();
|
||||
try {
|
||||
HSSFSheet sheet = workbook.createSheet("In Cell Lists");
|
||||
HSSFRow row = sheet.createRow(0);
|
||||
|
||||
// Create a cell at A1 and insert a single, bulleted, item into
|
||||
// that cell.
|
||||
HSSFCell cell = row.createCell(0);
|
||||
this.bulletedItemInCell(workbook, "List Item", cell);
|
||||
|
||||
// Create a cell at A2 and insert a plain list - that is one
|
||||
// whose items are neither bulleted or numbered - into that cell.
|
||||
row = sheet.createRow(1);
|
||||
cell = row.createCell(0);
|
||||
ArrayList<String> listItems = new ArrayList<String>();
|
||||
listItems.add("List Item One.");
|
||||
listItems.add("List Item Two.");
|
||||
listItems.add("List Item Three.");
|
||||
listItems.add("List Item Four.");
|
||||
this.listInCell(workbook, listItems, cell);
|
||||
// The row height and cell width are set here to ensure that the
|
||||
// list may be seen.
|
||||
row.setHeight((short)1100);
|
||||
sheet.setColumnWidth(0, 9500);
|
||||
|
||||
// Create a cell at A3 and insert a numbered list into that cell.
|
||||
// Note that a couple of items have been added to the listItems
|
||||
// ArrayList
|
||||
row = sheet.createRow(2);
|
||||
cell = row.createCell(0);
|
||||
listItems.add("List Item Five.");
|
||||
listItems.add("List Item Six.");
|
||||
this.numberedListInCell(workbook, listItems, cell, 1, 2);
|
||||
row.setHeight((short)1550);
|
||||
|
||||
// Create a cell at A4 and insert a numbered list into that cell.
|
||||
// Note that a couple of items have been added to the listItems
|
||||
// ArrayList
|
||||
row = sheet.createRow(3);
|
||||
cell = row.createCell(0);
|
||||
listItems.add("List Item Seven.");
|
||||
listItems.add("List Item Eight.");
|
||||
listItems.add("List Item Nine.");
|
||||
listItems.add("List Item Ten.");
|
||||
this.bulletedListInCell(workbook, listItems, cell);
|
||||
row.setHeight((short)2550);
|
||||
|
||||
// Insert a plain, multi-level list into cell A5. Note that
|
||||
// the major difference here is that the list items are passed as
|
||||
// an ArrayList of MultiLevelListItems. Note that an ArrayList
|
||||
// of instances of an inner class was used here in preference to
|
||||
// a Hashtable or HashMap as the ArrayList will preserve the
|
||||
// ordering of the items added to it; the first item added will
|
||||
// be the first item recovered and the last item added, the last
|
||||
// item recovered. Alternatively, a LinkedHashMap could be used
|
||||
// to preserve order.
|
||||
row = sheet.createRow(4);
|
||||
cell = row.createCell(0);
|
||||
ArrayList<MultiLevelListItem> multiLevelListItems = new ArrayList<MultiLevelListItem>();
|
||||
listItems = new ArrayList<String>();
|
||||
listItems.add("ML List Item One - Sub Item One.");
|
||||
listItems.add("ML List Item One - Sub Item Two.");
|
||||
listItems.add("ML List Item One - Sub Item Three.");
|
||||
listItems.add("ML List Item One - Sub Item Four.");
|
||||
multiLevelListItems.add(new MultiLevelListItem("List Item One.", listItems));
|
||||
// Passing either null or an empty ArrayList will signal that
|
||||
// there are no lower level items associated with the top level
|
||||
// item
|
||||
multiLevelListItems.add(new MultiLevelListItem("List Item Two.", null));
|
||||
multiLevelListItems.add(new MultiLevelListItem("List Item Three.", null));
|
||||
listItems = new ArrayList<String>();
|
||||
listItems.add("ML List Item Four - Sub Item One.");
|
||||
listItems.add("ML List Item Four - Sub Item Two.");
|
||||
listItems.add("ML List Item Four - Sub Item Three.");
|
||||
multiLevelListItems.add(new MultiLevelListItem("List Item Four.", listItems));
|
||||
this.multiLevelListInCell(workbook, multiLevelListItems, cell);
|
||||
row.setHeight((short)2800);
|
||||
|
||||
// Insert a numbered multi-level list into cell A6. Note that the
|
||||
// same ArrayList as constructed for the above plain multi-level
|
||||
// list example will be re-used
|
||||
row = sheet.createRow(5);
|
||||
cell = row.createCell(0);
|
||||
this.multiLevelNumberedListInCell(workbook, multiLevelListItems,
|
||||
cell, 1, 1, 1, 2);
|
||||
row.setHeight((short)2800);
|
||||
|
||||
// Insert a numbered multi-level list into cell A7. Note that the
|
||||
// same ArrayList as constructed for the plain multi-level list
|
||||
// example will be re-used
|
||||
row = sheet.createRow(6);
|
||||
cell = row.createCell(0);
|
||||
this.multiLevelBulletedListInCell(workbook, multiLevelListItems, cell);
|
||||
row.setHeight((short)2800);
|
||||
|
||||
// Save the completed workbook
|
||||
FileOutputStream fos = new FileOutputStream(new File(outputFilename));
|
||||
try {
|
||||
workbook.write(fos);
|
||||
} finally {
|
||||
fos.close();
|
||||
}
|
||||
}
|
||||
catch(FileNotFoundException fnfEx) {
|
||||
System.out.println("Caught a: " + fnfEx.getClass().getName());
|
||||
System.out.println("Message: " + fnfEx.getMessage());
|
||||
System.out.println("Stacktrace follows...........");
|
||||
fnfEx.printStackTrace(System.out);
|
||||
}
|
||||
catch(IOException ioEx) {
|
||||
System.out.println("Caught a: " + ioEx.getClass().getName());
|
||||
System.out.println("Message: " + ioEx.getMessage());
|
||||
System.out.println("Stacktrace follows...........");
|
||||
ioEx.printStackTrace(System.out);
|
||||
}
|
||||
finally {
|
||||
workbook.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a single bulleted item into a cell.
|
||||
*
|
||||
* @param workbook A reference to the HSSFWorkbook that 'contains' the
|
||||
* cell.
|
||||
* @param listItem An instance of the String class encapsulating the
|
||||
* items text.
|
||||
* @param cell An instance of the HSSFCell class that encapsulates a
|
||||
* reference to the spreadsheet cell into which the list item
|
||||
* will be written.
|
||||
*/
|
||||
public void bulletedItemInCell(HSSFWorkbook workbook, String listItem, HSSFCell cell) {
|
||||
// A format String must be built to ensure that the contents of the
|
||||
// cell appear as a bulleted item.
|
||||
HSSFDataFormat format = workbook.createDataFormat();
|
||||
String formatString = InCellLists.BULLET_CHARACTER + " @";
|
||||
int formatIndex = format.getFormat(formatString);
|
||||
|
||||
// Construct an HSSFCellStyle and set it's data formt to use the
|
||||
// object created above.
|
||||
HSSFCellStyle bulletStyle = workbook.createCellStyle();
|
||||
bulletStyle.setDataFormat((short)formatIndex);
|
||||
|
||||
// Set the cells contents and style.
|
||||
cell.setCellValue(new HSSFRichTextString(listItem));
|
||||
cell.setCellStyle(bulletStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a list of plain items - that is items that are neither
|
||||
* numbered or bulleted - into a single cell.
|
||||
*
|
||||
* @param workbook A reference to the HSSFWorkbook that 'contains' the
|
||||
* cell.
|
||||
* @param listItems An ArrayList whose elements encapsulate the text for
|
||||
* the list's items.
|
||||
* @param cell An instance of the HSSFCell class that encapsulates a
|
||||
* reference to the spreadsheet cell into which the list
|
||||
* will be written.
|
||||
*/
|
||||
public void listInCell(HSSFWorkbook workbook, ArrayList<String> listItems, HSSFCell cell) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
HSSFCellStyle wrapStyle = workbook.createCellStyle();
|
||||
wrapStyle.setWrapText(true);
|
||||
for(String listItem : listItems) {
|
||||
buffer.append(listItem);
|
||||
buffer.append("\n");
|
||||
}
|
||||
// The StringBuffer's contents are the source for the contents
|
||||
// of the cell.
|
||||
cell.setCellValue(new HSSFRichTextString(buffer.toString().trim()));
|
||||
cell.setCellStyle(wrapStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a numbered list into a single cell.
|
||||
*
|
||||
* @param workbook A reference to the HSSFWorkbook that 'contains' the
|
||||
* cell.
|
||||
* @param listItems An ArrayList whose elements encapsulate the text for
|
||||
* the lists items.
|
||||
* @param cell An instance of the HSSFCell class that encapsulates a
|
||||
* reference to the spreadsheet cell into which the list
|
||||
* will be written.
|
||||
* @param startingValue A primitive int containing the number for the first
|
||||
* item in the list.
|
||||
* @param increment A primitive int containing the value that should be used
|
||||
* to calculate subsequent item numbers.
|
||||
*/
|
||||
public void numberedListInCell(HSSFWorkbook workbook,
|
||||
ArrayList<String> listItems,
|
||||
HSSFCell cell,
|
||||
int startingValue,
|
||||
int increment) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
int itemNumber = startingValue;
|
||||
// Note that again, an HSSFCellStye object is required and that
|
||||
// it's wrap text property should be set to 'true'
|
||||
HSSFCellStyle wrapStyle = workbook.createCellStyle();
|
||||
wrapStyle.setWrapText(true);
|
||||
// Note that the basic method is identical to the listInCell() method
|
||||
// with one difference; a number prefixed to the items text.
|
||||
for(String listItem : listItems) {
|
||||
buffer.append(itemNumber).append(". ");
|
||||
buffer.append(listItem);
|
||||
buffer.append("\n");
|
||||
itemNumber += increment;
|
||||
}
|
||||
// The StringBuffer's contents are the source for the contents
|
||||
// of the cell.
|
||||
cell.setCellValue(new HSSFRichTextString(buffer.toString().trim()));
|
||||
cell.setCellStyle(wrapStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a bulleted list into a cell.
|
||||
*
|
||||
* @param workbook A reference to the HSSFWorkbook that 'contains' the
|
||||
* cell.
|
||||
* @param listItems An ArrayList whose elements encapsulate the text for
|
||||
* the lists items.
|
||||
* @param cell An instance of the HSSFCell class that encapsulates a
|
||||
* reference to the spreadsheet cell into which the list
|
||||
* will be written.
|
||||
*/
|
||||
public void bulletedListInCell(HSSFWorkbook workbook,
|
||||
ArrayList<String> listItems,
|
||||
HSSFCell cell) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
// Note that again, an HSSFCellStye object is required and that
|
||||
// it's wrap text property should be set to 'true'
|
||||
HSSFCellStyle wrapStyle = workbook.createCellStyle();
|
||||
wrapStyle.setWrapText(true);
|
||||
// Note that the basic method is identical to the listInCell() method
|
||||
// with one difference; the bullet character prefixed to the items text.
|
||||
for(String listItem : listItems) {
|
||||
buffer.append(InCellLists.BULLET_CHARACTER + " ");
|
||||
buffer.append(listItem);
|
||||
buffer.append("\n");
|
||||
}
|
||||
// The StringBuffer's contents are the source for the contents
|
||||
// of the cell.
|
||||
cell.setCellValue(new HSSFRichTextString(buffer.toString().trim()));
|
||||
cell.setCellStyle(wrapStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a multi-level list into a cell.
|
||||
*
|
||||
* @param workbook A reference to the HSSFWorkbook that 'contains' the
|
||||
* cell.
|
||||
* @param multiLevelListItems An ArrayList whose elements contain instances
|
||||
* of the MultiLevelListItem class. Each element
|
||||
* encapsulates the text for the high level item
|
||||
* along with an ArrayList. Each element of this
|
||||
* ArrayList encapsulates the text for a lower
|
||||
* level item.
|
||||
* @param cell An instance of the HSSFCell class that encapsulates a
|
||||
* reference to the spreadsheet cell into which the list
|
||||
* will be written.
|
||||
*/
|
||||
public void multiLevelListInCell(HSSFWorkbook workbook,
|
||||
ArrayList<MultiLevelListItem> multiLevelListItems,
|
||||
HSSFCell cell) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
// Note that again, an HSSFCellStye object is required and that
|
||||
// it's wrap text property should be set to 'true'
|
||||
HSSFCellStyle wrapStyle = workbook.createCellStyle();
|
||||
wrapStyle.setWrapText(true);
|
||||
// Step through the ArrayList of MultilLevelListItem instances.
|
||||
for(MultiLevelListItem multiLevelListItem : multiLevelListItems) {
|
||||
// For each element in the ArrayList, get the text for the high
|
||||
// level list item......
|
||||
buffer.append(multiLevelListItem.getItemText());
|
||||
buffer.append("\n");
|
||||
// and then an ArrayList whose elements encapsulate the text
|
||||
// for the lower level list items.
|
||||
ArrayList<String> lowerLevelItems = multiLevelListItem.getLowerLevelItems();
|
||||
if(!(lowerLevelItems == null) && !(lowerLevelItems.isEmpty())) {
|
||||
for(String item : lowerLevelItems) {
|
||||
buffer.append(InCellLists.TAB);
|
||||
buffer.append(item);
|
||||
buffer.append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
// The StringBuffer's contents are the source for the contents
|
||||
// of the cell.
|
||||
cell.setCellValue(new HSSFRichTextString(buffer.toString().trim()));
|
||||
cell.setCellStyle(wrapStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a multi-level list into a cell.
|
||||
*
|
||||
* @param workbook A reference to the HSSFWorkbook that 'contains' the
|
||||
* cell.
|
||||
* @param multiLevelListItems An ArrayList whose elements contain instances
|
||||
* of the MultiLevelListItem class. Each element
|
||||
* encapsulates the text for the high level item
|
||||
* along with an ArrayList. Each element of this
|
||||
* ArrayList encapsulates the text for a lower
|
||||
* level item.
|
||||
* @param cell An instance of the HSSFCell class that encapsulates a
|
||||
* reference to the spreadsheet cell into which the list
|
||||
* will be written.
|
||||
* @param highLevelStartingValue A primitive int containing the number
|
||||
* for the first high level item in the list.
|
||||
* @param highLevelIncrement A primitive int containing the value that
|
||||
* should be used to calculate the number of
|
||||
* subsequent high level item.
|
||||
* @param lowLevelStartingValue A primitive int will containing the number
|
||||
* for the first low level item associated
|
||||
* with a high level item.
|
||||
* @param lowLevelIncrement A primitive int containing the value that
|
||||
* should be used to calculate the number of
|
||||
* subsequent low level item.
|
||||
*/
|
||||
public void multiLevelNumberedListInCell(HSSFWorkbook workbook,
|
||||
ArrayList<MultiLevelListItem> multiLevelListItems,
|
||||
HSSFCell cell,
|
||||
int highLevelStartingValue,
|
||||
int highLevelIncrement,
|
||||
int lowLevelStartingValue,
|
||||
int lowLevelIncrement) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
int highLevelItemNumber = highLevelStartingValue;
|
||||
// Note that again, an HSSFCellStye object is required and that
|
||||
// it's wrap text property should be set to 'true'
|
||||
HSSFCellStyle wrapStyle = workbook.createCellStyle();
|
||||
wrapStyle.setWrapText(true);
|
||||
// Step through the ArrayList of MultilLevelListItem instances.
|
||||
for(MultiLevelListItem multiLevelListItem : multiLevelListItems) {
|
||||
// For each element in the ArrayList, get the text for the high
|
||||
// level list item......
|
||||
buffer.append(highLevelItemNumber);
|
||||
buffer.append(". ");
|
||||
buffer.append(multiLevelListItem.getItemText());
|
||||
buffer.append("\n");
|
||||
// and then an ArrayList whose elements encapsulate the text
|
||||
// for the lower level list items.
|
||||
ArrayList<String> lowerLevelItems = multiLevelListItem.getLowerLevelItems();
|
||||
if(!(lowerLevelItems == null) && !(lowerLevelItems.isEmpty())) {
|
||||
int lowLevelItemNumber = lowLevelStartingValue;
|
||||
for(String item : lowerLevelItems) {
|
||||
buffer.append(InCellLists.TAB);
|
||||
buffer.append(highLevelItemNumber);
|
||||
buffer.append(".");
|
||||
buffer.append(lowLevelItemNumber);
|
||||
buffer.append(" ");
|
||||
buffer.append(item);
|
||||
buffer.append("\n");
|
||||
lowLevelItemNumber += lowLevelIncrement;
|
||||
}
|
||||
}
|
||||
highLevelItemNumber += highLevelIncrement;
|
||||
}
|
||||
// The StringBuffer's contents are the source for the contents
|
||||
// of the cell.
|
||||
cell.setCellValue(new HSSFRichTextString(buffer.toString().trim()));
|
||||
cell.setCellStyle(wrapStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a bulleted multi-level list into a cell.
|
||||
*
|
||||
* @param workbook A reference to the HSSFWorkbook that 'contains' the
|
||||
* cell.
|
||||
* @param multiLevelListItems An ArrayList whose elements contain instances
|
||||
* of the MultiLevelListItem class. Each element
|
||||
* encapsulates the text for the high level item
|
||||
* along with an ArrayList. Each element of this
|
||||
* ArrayList encapsulates the text for a lower
|
||||
* level item.
|
||||
* @param cell An instance of the HSSFCell class that encapsulates a
|
||||
* reference to the spreadsheet cell into which the list
|
||||
* will be written.
|
||||
*/
|
||||
public void multiLevelBulletedListInCell(HSSFWorkbook workbook,
|
||||
ArrayList<MultiLevelListItem> multiLevelListItems,
|
||||
HSSFCell cell) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
// Note that again, an HSSFCellStye object is required and that
|
||||
// it's wrap text property should be set to 'true'
|
||||
HSSFCellStyle wrapStyle = workbook.createCellStyle();
|
||||
wrapStyle.setWrapText(true);
|
||||
// Step through the ArrayList of MultilLevelListItem instances.
|
||||
for(MultiLevelListItem multiLevelListItem : multiLevelListItems) {
|
||||
// For each element in the ArrayList, get the text for the high
|
||||
// level list item......
|
||||
buffer.append(InCellLists.BULLET_CHARACTER);
|
||||
buffer.append(" ");
|
||||
buffer.append(multiLevelListItem.getItemText());
|
||||
buffer.append("\n");
|
||||
// and then an ArrayList whose elements encapsulate the text
|
||||
// for the lower level list items.
|
||||
ArrayList<String> lowerLevelItems = multiLevelListItem.getLowerLevelItems();
|
||||
if(!(lowerLevelItems == null) && !(lowerLevelItems.isEmpty())) {
|
||||
for(String item : lowerLevelItems) {
|
||||
buffer.append(InCellLists.TAB);
|
||||
buffer.append(InCellLists.BULLET_CHARACTER);
|
||||
buffer.append(" ");
|
||||
buffer.append(item);
|
||||
buffer.append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
// The StringBuffer's contents are the source for the contents
|
||||
// of the cell.
|
||||
cell.setCellValue(new HSSFRichTextString(buffer.toString().trim()));
|
||||
cell.setCellStyle(wrapStyle);
|
||||
}
|
||||
|
||||
/**
|
||||
* The main entry point to the program. Demonstrates how to call the method
|
||||
* that will create an Excel workbook containing many different sorts of
|
||||
* lists.
|
||||
*
|
||||
* @param args the command line arguments.
|
||||
*/
|
||||
public static void main(String[] args) throws IOException {
|
||||
new InCellLists().demonstrateMethodCalls("Latest In Cell List.xls");
|
||||
}
|
||||
|
||||
/**
|
||||
* An instance of this inner class models an item or element in a
|
||||
* multi-level list. Each multi-level list item consists of the text for the
|
||||
* high level items and an ArrayList containing the text for each of the
|
||||
* associated lower level items. When written into a cell, each multi-level
|
||||
* list item will have this general appearance.
|
||||
*
|
||||
* Item One
|
||||
* Sub Item One.
|
||||
* Sub Item Two.
|
||||
* Item Two
|
||||
* Sub Item One.
|
||||
* Sub Item Two.
|
||||
* etc.
|
||||
*
|
||||
* It would be quite possible to modify this class to model much more
|
||||
* complex list structures descending through two, three or even more
|
||||
* levels.
|
||||
*/
|
||||
public final class MultiLevelListItem {
|
||||
|
||||
private String itemText = null;
|
||||
private ArrayList<String> lowerLevelItems = null;
|
||||
|
||||
/**
|
||||
* Create a new instance of the MultiLevelListItem class using the
|
||||
* following parameters.
|
||||
*
|
||||
* @param itemText A String that encapsulates the text for the high
|
||||
* level list item.
|
||||
* @param lowerLevelItems An ArrayList whose elements encapsulate the
|
||||
* text for the associated lower level list
|
||||
* items.
|
||||
*/
|
||||
public MultiLevelListItem(String itemText, ArrayList<String> lowerLevelItems) {
|
||||
this.itemText = itemText;
|
||||
this.lowerLevelItems = lowerLevelItems;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the text for the high level list item.
|
||||
*
|
||||
* @return A String that encapsulates the text for the high level list
|
||||
* item.
|
||||
*/
|
||||
public String getItemText() {
|
||||
return(this.itemText);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the text for the associated lower level list items.
|
||||
*
|
||||
* @return An ArrayList whose elements each encapsulate the text for a
|
||||
* single associated lower level list item.
|
||||
*/
|
||||
public ArrayList<String> getLowerLevelItems() {
|
||||
return(this.lowerLevelItems);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
|
||||
/**
|
||||
* An example of how to merge regions of cells.
|
||||
*/
|
||||
public class MergedCells {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
|
||||
HSSFRow row = sheet.createRow(1);
|
||||
HSSFCell cell = row.createCell(1);
|
||||
cell.setCellValue("This is a test of merging");
|
||||
|
||||
sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 2));
|
||||
|
||||
// Write the output to a file
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.CellType;
|
||||
|
||||
/**
|
||||
* Demonstrates how to use newlines in cells.
|
||||
*/
|
||||
public class NewLinesInCells {
|
||||
public static void main( String[] args ) throws IOException {
|
||||
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet s = wb.createSheet();
|
||||
HSSFRow r = null;
|
||||
HSSFCell c = null;
|
||||
HSSFCellStyle cs = wb.createCellStyle();
|
||||
HSSFFont f2 = wb.createFont();
|
||||
|
||||
cs = wb.createCellStyle();
|
||||
|
||||
cs.setFont(f2);
|
||||
// Word Wrap MUST be turned on
|
||||
cs.setWrapText(true);
|
||||
|
||||
r = s.createRow(2);
|
||||
r.setHeight((short) 0x349);
|
||||
c = r.createCell(2);
|
||||
c.setCellType(CellType.STRING);
|
||||
c.setCellValue("Use \n with word wrap on to create a new line");
|
||||
c.setCellStyle(cs);
|
||||
s.setColumnWidth(2, (int) ((50 * 8) / ((double) 1 / 20)));
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.util.WorkbookUtil;
|
||||
|
||||
/**
|
||||
* Creates a new workbook with a sheet that's been explicitly defined.
|
||||
*/
|
||||
public abstract class NewSheet {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
wb.createSheet("new sheet");
|
||||
// create with default name
|
||||
wb.createSheet();
|
||||
final String name = "second sheet";
|
||||
// setting sheet name later
|
||||
wb.setSheetName(1, WorkbookUtil.createSafeSheetName(name));
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
|
||||
/**
|
||||
* This example creates a new blank workbook. This workbook will contain a single blank sheet.
|
||||
*/
|
||||
public class NewWorkbook {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,322 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.*;
|
||||
import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* Demonstrates how to use the office drawing capabilities of POI.
|
||||
*
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
*/
|
||||
public class OfficeDrawing {
|
||||
public static void main(String[] args) throws IOException {
|
||||
// Create the workbook and sheets.
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
HSSFSheet sheet2 = wb.createSheet("second sheet");
|
||||
HSSFSheet sheet3 = wb.createSheet("third sheet");
|
||||
HSSFSheet sheet4 = wb.createSheet("fourth sheet");
|
||||
HSSFSheet sheet5 = wb.createSheet("fifth sheet");
|
||||
|
||||
// Draw stuff in them
|
||||
drawSheet1( sheet1 );
|
||||
drawSheet2( sheet2 );
|
||||
drawSheet3( sheet3 );
|
||||
drawSheet4( sheet4, wb );
|
||||
drawSheet5( sheet5, wb );
|
||||
|
||||
// Write the file out.
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void drawSheet1( HSSFSheet sheet1 )
|
||||
{
|
||||
// Create a row and size one of the cells reasonably large.
|
||||
HSSFRow row = sheet1.createRow(2);
|
||||
row.setHeight((short) 2800);
|
||||
row.createCell(1);
|
||||
sheet1.setColumnWidth(2, 9000);
|
||||
|
||||
// Create the drawing patriarch. This is the top level container for
|
||||
// all shapes.
|
||||
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
|
||||
|
||||
// Draw some lines and an oval.
|
||||
drawLinesToCenter( patriarch );
|
||||
drawManyLines( patriarch );
|
||||
drawOval( patriarch );
|
||||
drawPolygon( patriarch );
|
||||
|
||||
// Draw a rectangle.
|
||||
HSSFSimpleShape rect = patriarch.createSimpleShape( new HSSFClientAnchor(100, 100, 900, 200, (short)0, 0, (short)0, 0) );
|
||||
rect.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
|
||||
}
|
||||
|
||||
private static void drawSheet2( HSSFSheet sheet2 )
|
||||
{
|
||||
// Create a row and size one of the cells reasonably large.
|
||||
HSSFRow row = sheet2.createRow(2);
|
||||
row.createCell(1);
|
||||
row.setHeightInPoints(240);
|
||||
sheet2.setColumnWidth(2, 9000);
|
||||
|
||||
// Create the drawing patriarch. This is the top level container for
|
||||
// all shapes. This will clear out any existing shapes for that sheet.
|
||||
HSSFPatriarch patriarch = sheet2.createDrawingPatriarch();
|
||||
|
||||
// Draw a grid in one of the cells.
|
||||
drawGrid( patriarch );
|
||||
}
|
||||
|
||||
private static void drawSheet3( HSSFSheet sheet3 )
|
||||
{
|
||||
// Create a row and size one of the cells reasonably large
|
||||
HSSFRow row = sheet3.createRow(2);
|
||||
row.setHeightInPoints(140);
|
||||
row.createCell(1);
|
||||
sheet3.setColumnWidth(2, 9000);
|
||||
|
||||
// Create the drawing patriarch. This is the top level container for
|
||||
// all shapes. This will clear out any existing shapes for that sheet.
|
||||
HSSFPatriarch patriarch = sheet3.createDrawingPatriarch();
|
||||
|
||||
// Create a shape group.
|
||||
HSSFShapeGroup group = patriarch.createGroup(
|
||||
new HSSFClientAnchor(0,0,900,200,(short)2,2,(short)2,2));
|
||||
|
||||
// Create a couple of lines in the group.
|
||||
HSSFSimpleShape shape1 = group.createShape(new HSSFChildAnchor(3,3,500,500));
|
||||
shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
( (HSSFChildAnchor) shape1.getAnchor() ).setAnchor((short)3,3,500,500);
|
||||
HSSFSimpleShape shape2 = group.createShape(new HSSFChildAnchor((short)1,200,400,600));
|
||||
shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
|
||||
}
|
||||
|
||||
private static void drawSheet4( HSSFSheet sheet4, HSSFWorkbook wb )
|
||||
{
|
||||
// Create the drawing patriarch. This is the top level container for
|
||||
// all shapes. This will clear out any existing shapes for that sheet.
|
||||
HSSFPatriarch patriarch = sheet4.createDrawingPatriarch();
|
||||
|
||||
// Create a couple of textboxes
|
||||
HSSFTextbox textbox1 = patriarch.createTextbox(
|
||||
new HSSFClientAnchor(0,0,0,0,(short)1,1,(short)2,2));
|
||||
textbox1.setString(new HSSFRichTextString("This is a test") );
|
||||
HSSFTextbox textbox2 = patriarch.createTextbox(
|
||||
new HSSFClientAnchor(0,0,900,100,(short)3,3,(short)3,4));
|
||||
textbox2.setString(new HSSFRichTextString("Woo") );
|
||||
textbox2.setFillColor(200,0,0);
|
||||
textbox2.setLineStyle(HSSFSimpleShape.LINESTYLE_DOTGEL);
|
||||
|
||||
// Create third one with some fancy font styling.
|
||||
HSSFTextbox textbox3 = patriarch.createTextbox(
|
||||
new HSSFClientAnchor(0,0,900,100,(short)4,4,(short)5,4+1));
|
||||
HSSFFont font = wb.createFont();
|
||||
font.setItalic(true);
|
||||
font.setUnderline(HSSFFont.U_DOUBLE);
|
||||
HSSFRichTextString string = new HSSFRichTextString("Woo!!!");
|
||||
string.applyFont(2,5,font);
|
||||
textbox3.setString(string );
|
||||
textbox3.setFillColor(0x08000030);
|
||||
textbox3.setLineStyle(HSSFSimpleShape.LINESTYLE_NONE); // no line around the textbox.
|
||||
textbox3.setNoFill(true); // make it transparent
|
||||
}
|
||||
|
||||
private static void drawSheet5( HSSFSheet sheet5, HSSFWorkbook wb ) throws IOException
|
||||
{
|
||||
|
||||
// Create the drawing patriarch. This is the top level container for
|
||||
// all shapes. This will clear out any existing shapes for that sheet.
|
||||
HSSFPatriarch patriarch = sheet5.createDrawingPatriarch();
|
||||
|
||||
HSSFClientAnchor anchor;
|
||||
anchor = new HSSFClientAnchor(0,0,0,255,(short)2,2,(short)4,7);
|
||||
anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
|
||||
patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4.png", wb ));
|
||||
|
||||
anchor = new HSSFClientAnchor(0,0,0,255,(short)4,2,(short)5,7);
|
||||
anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
|
||||
patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4edited.png", wb ));
|
||||
|
||||
anchor = new HSSFClientAnchor(0,0,1023,255,(short)6,2,(short)8,7);
|
||||
anchor.setAnchorType( AnchorType.MOVE_DONT_RESIZE );
|
||||
HSSFPicture picture = patriarch.createPicture(anchor, loadPicture( "src/resources/logos/logoKarmokar4s.png", wb ));
|
||||
//Reset the image to the original size.
|
||||
picture.resize();
|
||||
picture.setLineStyle( HSSFShape.LINESTYLE_DASHDOTGEL );
|
||||
|
||||
}
|
||||
|
||||
private static int loadPicture( String path, HSSFWorkbook wb ) throws IOException
|
||||
{
|
||||
int pictureIndex;
|
||||
FileInputStream fis = null;
|
||||
ByteArrayOutputStream bos = null;
|
||||
try
|
||||
{
|
||||
fis = new FileInputStream( path);
|
||||
bos = new ByteArrayOutputStream( );
|
||||
int c;
|
||||
while ( (c = fis.read()) != -1)
|
||||
bos.write( c );
|
||||
pictureIndex = wb.addPicture( bos.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG );
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (fis != null)
|
||||
fis.close();
|
||||
if (bos != null)
|
||||
bos.close();
|
||||
}
|
||||
return pictureIndex;
|
||||
}
|
||||
|
||||
private static void drawOval( HSSFPatriarch patriarch )
|
||||
{
|
||||
// Create an oval and style to taste.
|
||||
HSSFClientAnchor a = new HSSFClientAnchor();
|
||||
a.setAnchor((short)2, 2, 20, 20, (short) 2, 2, 190, 80);
|
||||
HSSFSimpleShape s = patriarch.createSimpleShape(a);
|
||||
s.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);
|
||||
s.setLineStyleColor(10,10,10);
|
||||
s.setFillColor(90,10,200);
|
||||
s.setLineWidth(HSSFShape.LINEWIDTH_ONE_PT * 3);
|
||||
s.setLineStyle(HSSFShape.LINESTYLE_DOTSYS);
|
||||
}
|
||||
|
||||
private static void drawPolygon( HSSFPatriarch patriarch )
|
||||
{
|
||||
// HSSFClientAnchor a = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 2, 2, (short) 3, 3 );
|
||||
// HSSFPolygon p = patriarch.createPolygon(a);
|
||||
// p.setPolygonDrawArea(100,100);
|
||||
// p.setPoints( new int[]{30, 90, 50}, new int[]{88, 5, 44} );
|
||||
|
||||
|
||||
HSSFClientAnchor a = new HSSFClientAnchor();
|
||||
a.setAnchor( (short) 2, 2, 0, 0, (short) 3, 3, 1023, 255 );
|
||||
HSSFShapeGroup g = patriarch.createGroup( a );
|
||||
g.setCoordinates(0,0,200,200);
|
||||
HSSFPolygon p1 = g.createPolygon( new HSSFChildAnchor( 0, 0, 200, 200 ) );
|
||||
p1.setPolygonDrawArea( 100, 100 );
|
||||
p1.setPoints( new int[]{0, 90, 50}, new int[]{5, 5, 44} );
|
||||
p1.setFillColor( 0, 255, 0 );
|
||||
HSSFPolygon p2 = g.createPolygon( new HSSFChildAnchor( 20, 20, 200, 200 ) );
|
||||
p2.setPolygonDrawArea( 200, 200 );
|
||||
p2.setPoints( new int[]{120, 20, 150}, new int[]{105, 30, 195} );
|
||||
p2.setFillColor( 255, 0, 0 );
|
||||
}
|
||||
|
||||
private static void drawManyLines( HSSFPatriarch patriarch )
|
||||
{
|
||||
// Draw bunch of lines
|
||||
int x1 = 100;
|
||||
int y1 = 100;
|
||||
int x2 = 800;
|
||||
int y2 = 200;
|
||||
int color = 0;
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
HSSFClientAnchor a2 = new HSSFClientAnchor();
|
||||
a2.setAnchor((short) 2, 2, x1, y1, (short) 2, 2, x2, y2);
|
||||
HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
|
||||
shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
shape2.setLineStyleColor(color);
|
||||
y1 -= 10;
|
||||
y2 -= 10;
|
||||
color += 30;
|
||||
}
|
||||
}
|
||||
|
||||
private static void drawGrid( HSSFPatriarch patriarch )
|
||||
{
|
||||
// This draws a grid of lines. Since the coordinates space fixed at
|
||||
// 1024 by 256 we use a ratio to get a reasonably square grids.
|
||||
|
||||
double xRatio = 3.22;
|
||||
double yRatio = 0.6711;
|
||||
|
||||
int x1 = 000;
|
||||
int y1 = 000;
|
||||
int x2 = 000;
|
||||
int y2 = 200;
|
||||
for (int i = 0; i < 20; i++)
|
||||
{
|
||||
HSSFClientAnchor a2 = new HSSFClientAnchor();
|
||||
a2.setAnchor((short) 2, 2, (int) ( x1 * xRatio ), (int) ( y1 * yRatio ),
|
||||
(short) 2, 2, (int) ( x2 * xRatio ), (int) ( y2 * yRatio ));
|
||||
HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
|
||||
shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
|
||||
x1 += 10;
|
||||
x2 += 10;
|
||||
}
|
||||
|
||||
x1 = 000;
|
||||
y1 = 000;
|
||||
x2 = 200;
|
||||
y2 = 000;
|
||||
for (int i = 0; i < 20; i++)
|
||||
{
|
||||
HSSFClientAnchor a2 = new HSSFClientAnchor();
|
||||
a2.setAnchor((short) 2, 2, (int) ( x1 * xRatio ), (int) ( y1 * yRatio ),
|
||||
(short) 2, 2, (int) ( x2 * xRatio ), (int) ( y2 * yRatio ));
|
||||
HSSFSimpleShape shape2 = patriarch.createSimpleShape(a2);
|
||||
shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
|
||||
y1 += 10;
|
||||
y2 += 10;
|
||||
}
|
||||
}
|
||||
|
||||
private static void drawLinesToCenter( HSSFPatriarch patriarch )
|
||||
{
|
||||
// Draw some lines from and to the corners
|
||||
{
|
||||
HSSFClientAnchor a1 = new HSSFClientAnchor();
|
||||
a1.setAnchor( (short)2, 2, 0, 0, (short) 2, 2, 512, 128);
|
||||
HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
|
||||
shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
}
|
||||
{
|
||||
HSSFClientAnchor a1 = new HSSFClientAnchor();
|
||||
a1.setAnchor( (short)2, 2, 512, 128, (short) 2, 2, 1024, 0);
|
||||
HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
|
||||
shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
}
|
||||
{
|
||||
HSSFClientAnchor a1 = new HSSFClientAnchor();
|
||||
a1.setAnchor( (short)1, 1, 0, 0, (short) 1, 1, 512, 100);
|
||||
HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
|
||||
shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
}
|
||||
{
|
||||
HSSFClientAnchor a1 = new HSSFClientAnchor();
|
||||
a1.setAnchor( (short)1, 1, 512, 100, (short) 1, 1, 1024, 0);
|
||||
HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1);
|
||||
shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,103 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.*;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Demonstrates the use of the EscherGraphics2d library.
|
||||
*
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
*/
|
||||
public class OfficeDrawingWithGraphics {
|
||||
public static void main( String[] args ) throws IOException {
|
||||
// Create a workbook with one sheet and size the first three somewhat
|
||||
// larger so we can fit the chemical structure diagram in.
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet( "my drawing" );
|
||||
sheet.setColumnWidth(1, 256 * 27);
|
||||
HSSFRow row1 = sheet.createRow(0);
|
||||
row1.setHeightInPoints(10 * 15f);
|
||||
HSSFRow row2 = sheet.createRow(1);
|
||||
row2.setHeightInPoints(5 * 15f);
|
||||
HSSFRow row3 = sheet.createRow(2);
|
||||
row3.setHeightInPoints(10 * 15f);
|
||||
|
||||
// Add some cells so we can test that the anchoring works when we
|
||||
// sort them.
|
||||
row1.createCell(0).setCellValue("C");
|
||||
row2.createCell(0).setCellValue("A");
|
||||
row3.createCell(0).setCellValue("B");
|
||||
|
||||
// Create the top level drawing patriarch.
|
||||
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
|
||||
|
||||
HSSFClientAnchor a;
|
||||
HSSFShapeGroup group;
|
||||
EscherGraphics g;
|
||||
EscherGraphics2d g2d;
|
||||
// Anchor entirely within one cell.
|
||||
a = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 );
|
||||
group = patriarch.createGroup( a );
|
||||
group.setCoordinates( 0, 0, 320, 276 );
|
||||
float verticalPointsPerPixel = a.getAnchorHeightInPoints(sheet) / Math.abs(group.getY2() - group.getY1());
|
||||
g = new EscherGraphics( group, wb, Color.black, verticalPointsPerPixel );
|
||||
g2d = new EscherGraphics2d( g );
|
||||
drawStar( g2d );
|
||||
|
||||
a = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 1, (short) 1, 1 );
|
||||
group = patriarch.createGroup( a );
|
||||
group.setCoordinates( 0, 0, 640, 276 );
|
||||
verticalPointsPerPixel = a.getAnchorHeightInPoints(sheet) / Math.abs(group.getY2() - group.getY1());
|
||||
// verticalPixelsPerPoint = (float)Math.abs(group.getY2() - group.getY1()) / a.getAnchorHeightInPoints(sheet);
|
||||
g = new EscherGraphics( group, wb, Color.black, verticalPointsPerPixel );
|
||||
g2d = new EscherGraphics2d( g );
|
||||
drawStar( g2d );
|
||||
|
||||
FileOutputStream out = new FileOutputStream("workbook.xls");
|
||||
wb.write(out);
|
||||
out.close();
|
||||
|
||||
}
|
||||
|
||||
private static void drawStar( EscherGraphics2d g2d )
|
||||
{
|
||||
g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
|
||||
for (double i = 0; i < Math.PI; i += 0.1)
|
||||
{
|
||||
g2d.setColor( new Color((int)(i * 5343062d) ) );
|
||||
int x1 = (int) ( Math.cos(i) * 160.0 ) + 160;
|
||||
int y1 = (int) ( Math.sin(i) * 138.0 ) + 138;
|
||||
int x2 = (int) ( -Math.cos(i) * 160.0 ) + 160;
|
||||
int y2 = (int) ( -Math.sin(i) * 138.0 ) + 138;
|
||||
g2d.setStroke(new BasicStroke(2));
|
||||
g2d.drawLine(x1,y1,x2,y2);
|
||||
}
|
||||
g2d.setFont(new Font("SansSerif",Font.BOLD | Font.ITALIC, 20));
|
||||
g2d.drawString("EscherGraphics2d",70,100);
|
||||
g2d.setColor(Color.yellow);
|
||||
g2d.fillOval( 160-20,138-20,40,40);
|
||||
g2d.setColor(Color.black);
|
||||
g2d.fillPolygon(new int[] {-10+160,0+160,10+160,0+160}, new int[] {0+138,10+138,0+138,-10+138}, 4);
|
||||
g2d.drawPolygon(new int[] {-160+160,0+160,160+160,0+160}, new int[] {0+138,138+138,0+138,-138+138}, 4);
|
||||
}
|
||||
}
|
@ -1,187 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.util.POILogFactory;
|
||||
import org.apache.poi.util.POILogger;
|
||||
|
||||
/**
|
||||
* Creates outlines.
|
||||
*/
|
||||
public class Outlines implements Closeable {
|
||||
public static void main(String[] args)
|
||||
throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
|
||||
POILogger LOGGER = POILogFactory.getLogger(Outlines.class);
|
||||
for (int i=1; i<=13; i++) {
|
||||
Outlines o = new Outlines();
|
||||
try {
|
||||
String log = (String)Outlines.class.getDeclaredMethod("test"+i).invoke(o);
|
||||
String filename = "outline"+i+".xls";
|
||||
o.writeOut(filename);
|
||||
LOGGER.log(POILogger.INFO, filename+" written. "+log);
|
||||
} finally {
|
||||
o.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final HSSFWorkbook wb = new HSSFWorkbook();
|
||||
private final HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
public void writeOut(String filename) throws IOException {
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
try {
|
||||
wb.write(fileOut);
|
||||
} finally {
|
||||
fileOut.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
wb.close();
|
||||
}
|
||||
|
||||
public String test1() {
|
||||
sheet1.groupColumn(4, 7);
|
||||
|
||||
for (int row = 0; row < 200; row++) {
|
||||
HSSFRow r = sheet1.createRow(row);
|
||||
for (int column = 0; column < 200; column++) {
|
||||
HSSFCell c = r.createCell(column);
|
||||
c.setCellValue(column);
|
||||
}
|
||||
}
|
||||
return "Two expanded groups.";
|
||||
}
|
||||
|
||||
public String test2() {
|
||||
sheet1.groupColumn(2, 10);
|
||||
sheet1.groupColumn(4, 7);
|
||||
sheet1.setColumnGroupCollapsed(4, true);
|
||||
return "Two groups. Inner group collapsed.";
|
||||
}
|
||||
|
||||
public String test3() {
|
||||
sheet1.groupColumn(2, 10);
|
||||
sheet1.groupColumn(4, 7);
|
||||
sheet1.setColumnGroupCollapsed(4, true);
|
||||
sheet1.setColumnGroupCollapsed(2, true);
|
||||
return "Two groups. Both collapsed.";
|
||||
}
|
||||
|
||||
public String test4() {
|
||||
sheet1.groupColumn(2, 10);
|
||||
sheet1.groupColumn(4, 7);
|
||||
sheet1.setColumnGroupCollapsed(4, true);
|
||||
sheet1.setColumnGroupCollapsed(2, true);
|
||||
|
||||
sheet1.setColumnGroupCollapsed(4, false);
|
||||
return "Two groups. Collapsed then inner group expanded.";
|
||||
}
|
||||
|
||||
public String test5() {
|
||||
sheet1.groupColumn(2, 10);
|
||||
sheet1.groupColumn(4, 7);
|
||||
sheet1.setColumnGroupCollapsed(4, true);
|
||||
sheet1.setColumnGroupCollapsed(2, true);
|
||||
|
||||
sheet1.setColumnGroupCollapsed(4, false);
|
||||
sheet1.setColumnGroupCollapsed(3, false);
|
||||
return "Two groups. Collapsed then reexpanded.";
|
||||
}
|
||||
|
||||
public String test6() {
|
||||
sheet1.groupColumn(2, 10);
|
||||
sheet1.groupColumn(4, 10);
|
||||
sheet1.setColumnGroupCollapsed(4, true);
|
||||
sheet1.setColumnGroupCollapsed(2, true);
|
||||
|
||||
sheet1.setColumnGroupCollapsed(3, false);
|
||||
return "Two groups with matching end points. Second group collapsed.";
|
||||
}
|
||||
|
||||
public String test7() {
|
||||
sheet1.groupRow(5, 14);
|
||||
sheet1.groupRow(7, 10);
|
||||
return "Row outlines.";
|
||||
}
|
||||
|
||||
public String test8() {
|
||||
sheet1.groupRow(5, 14);
|
||||
sheet1.groupRow(7, 10);
|
||||
sheet1.setRowGroupCollapsed(7, true);
|
||||
return "Row outlines. Inner group collapsed.";
|
||||
}
|
||||
|
||||
public String test9() {
|
||||
sheet1.groupRow(5, 14);
|
||||
sheet1.groupRow(7, 10);
|
||||
sheet1.setRowGroupCollapsed(7, true);
|
||||
sheet1.setRowGroupCollapsed(5, true);
|
||||
return "Row outlines. Both collapsed.";
|
||||
}
|
||||
|
||||
public String test10() {
|
||||
sheet1.groupRow(5, 14);
|
||||
sheet1.groupRow(7, 10);
|
||||
sheet1.setRowGroupCollapsed(7, true);
|
||||
sheet1.setRowGroupCollapsed(5, true);
|
||||
sheet1.setRowGroupCollapsed(8, false);
|
||||
return "Row outlines. Collapsed then inner group expanded.";
|
||||
}
|
||||
|
||||
public String test11() {
|
||||
sheet1.groupRow(5, 14);
|
||||
sheet1.groupRow(7, 10);
|
||||
sheet1.setRowGroupCollapsed(7, true);
|
||||
sheet1.setRowGroupCollapsed(5, true);
|
||||
sheet1.setRowGroupCollapsed(8, false);
|
||||
sheet1.setRowGroupCollapsed(14, false);
|
||||
return "Row outlines. Collapsed then expanded.";
|
||||
}
|
||||
|
||||
public String test12() {
|
||||
sheet1.groupRow(5, 14);
|
||||
sheet1.groupRow(7, 14);
|
||||
sheet1.setRowGroupCollapsed(7, true);
|
||||
sheet1.setRowGroupCollapsed(5, true);
|
||||
sheet1.setRowGroupCollapsed(6, false);
|
||||
return "Row outlines. Two row groups with matching end points. Second group collapsed.";
|
||||
}
|
||||
|
||||
public String test13() {
|
||||
sheet1.groupRow(5, 14);
|
||||
sheet1.groupRow(7, 14);
|
||||
sheet1.groupRow(16, 19);
|
||||
|
||||
sheet1.groupColumn(4, 7);
|
||||
sheet1.groupColumn(9, 12);
|
||||
sheet1.groupColumn(10, 11);
|
||||
return "Mixed bag.";
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
import org.apache.poi.ss.usermodel.CellType;
|
||||
|
||||
/**
|
||||
* This example demonstrates opening a workbook, modifying it and writing
|
||||
* the results back out.
|
||||
*
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
*/
|
||||
public class ReadWriteWorkbook {
|
||||
public static void main(String[] args) throws IOException {
|
||||
FileInputStream fileIn = null;
|
||||
FileOutputStream fileOut = null;
|
||||
|
||||
try
|
||||
{
|
||||
fileIn = new FileInputStream("workbook.xls");
|
||||
POIFSFileSystem fs = new POIFSFileSystem(fileIn);
|
||||
HSSFWorkbook wb = new HSSFWorkbook(fs);
|
||||
HSSFSheet sheet = wb.getSheetAt(0);
|
||||
HSSFRow row = sheet.getRow(2);
|
||||
if (row == null)
|
||||
row = sheet.createRow(2);
|
||||
HSSFCell cell = row.getCell(3);
|
||||
if (cell == null)
|
||||
cell = row.createCell(3);
|
||||
cell.setCellType(CellType.STRING);
|
||||
cell.setCellValue("a test");
|
||||
|
||||
// Write the output to a file
|
||||
fileOut = new FileOutputStream("workbookout.xls");
|
||||
wb.write(fileOut);
|
||||
} finally {
|
||||
if (fileOut != null)
|
||||
fileOut.close();
|
||||
if (fileIn != null)
|
||||
fileIn.close();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
|
||||
public class RepeatingRowsAndColumns {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("first sheet");
|
||||
HSSFSheet sheet2 = wb.createSheet("second sheet");
|
||||
HSSFSheet sheet3 = wb.createSheet("third sheet");
|
||||
|
||||
HSSFFont boldFont = wb.createFont();
|
||||
boldFont.setFontHeightInPoints((short)22);
|
||||
boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
||||
|
||||
HSSFCellStyle boldStyle = wb.createCellStyle();
|
||||
boldStyle.setFont(boldFont);
|
||||
|
||||
HSSFRow row = sheet1.createRow(1);
|
||||
HSSFCell cell = row.createCell(0);
|
||||
cell.setCellValue("This quick brown fox");
|
||||
cell.setCellStyle(boldStyle);
|
||||
|
||||
// Set the columns to repeat from column 0 to 2 on the first sheet
|
||||
sheet1.setRepeatingColumns(CellRangeAddress.valueOf("A:C"));
|
||||
// Set the rows to repeat from row 0 to 2 on the second sheet.
|
||||
sheet2.setRepeatingRows(CellRangeAddress.valueOf("1:3"));
|
||||
// Set the the repeating rows and columns on the third sheet.
|
||||
CellRangeAddress cra = CellRangeAddress.valueOf("D1:E2");
|
||||
sheet3.setRepeatingColumns(cra);
|
||||
sheet3.setRepeatingRows(cra);
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
|
||||
public class SplitAndFreezePanes {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
HSSFSheet sheet2 = wb.createSheet("second sheet");
|
||||
HSSFSheet sheet3 = wb.createSheet("third sheet");
|
||||
HSSFSheet sheet4 = wb.createSheet("fourth sheet");
|
||||
|
||||
// Freeze just one row
|
||||
sheet1.createFreezePane( 0, 1, 0, 1 );
|
||||
// Freeze just one column
|
||||
sheet2.createFreezePane( 1, 0, 1, 0 );
|
||||
// Freeze the columns and rows (forget about scrolling position of the lower right quadrant).
|
||||
sheet3.createFreezePane( 2, 2 );
|
||||
// Create a split with the lower left side being the active quadrant
|
||||
sheet4.createSplitPane( 2000, 2000, 0, 0, Sheet.PANE_LOWER_LEFT );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
|
||||
/**
|
||||
* Demonstrates how to create and use fonts.
|
||||
*/
|
||||
public class WorkingWithFonts {
|
||||
public static void main(String[] args) throws IOException {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||
|
||||
// Create a row and put some cells in it. Rows are 0 based.
|
||||
HSSFRow row = sheet.createRow(1);
|
||||
|
||||
// Create a new font and alter it.
|
||||
HSSFFont font = wb.createFont();
|
||||
font.setFontHeightInPoints((short)24);
|
||||
font.setFontName("Courier New");
|
||||
font.setItalic(true);
|
||||
font.setStrikeout(true);
|
||||
|
||||
// Fonts are set into a style so create a new one to use.
|
||||
HSSFCellStyle style = wb.createCellStyle();
|
||||
style.setFont(font);
|
||||
|
||||
// Create a cell and put a value in it.
|
||||
HSSFCell cell = row.createCell(1);
|
||||
cell.setCellValue("This is a test of fonts");
|
||||
cell.setCellStyle(style);
|
||||
|
||||
// Write the output to a file
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.FileOutputStream;
|
||||
|
||||
/**
|
||||
* Sets the zoom magnication for a sheet.
|
||||
*
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
*/
|
||||
public class ZoomSheet
|
||||
{
|
||||
public static void main(String[] args)
|
||||
throws IOException
|
||||
{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
sheet1.setZoom(75); // 75 percent magnification
|
||||
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
wb.close();
|
||||
}
|
||||
}
|
@ -1,553 +0,0 @@
|
||||
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.view;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
import javax.swing.border.AbstractBorder;
|
||||
|
||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||
|
||||
/**
|
||||
* This is an attempt to implement Excel style borders for the SheetViewer.
|
||||
* Mostly just overrides stuff so the javadoc won't appear here but will
|
||||
* appear in the generated stuff.
|
||||
*
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author Jason Height
|
||||
*/
|
||||
public class SVBorder extends AbstractBorder {
|
||||
private Color northColor = null;
|
||||
private Color eastColor = null;
|
||||
private Color southColor = null;
|
||||
private Color westColor = null;
|
||||
private BorderStyle northBorderType = BorderStyle.NONE;
|
||||
private BorderStyle eastBorderType = BorderStyle.NONE;
|
||||
private BorderStyle southBorderType = BorderStyle.NONE;
|
||||
private BorderStyle westBorderType = BorderStyle.NONE;
|
||||
private boolean northBorder=false;
|
||||
private boolean eastBorder=false;
|
||||
private boolean southBorder=false;
|
||||
private boolean westBorder=false;
|
||||
private boolean selected = false;
|
||||
|
||||
public void setBorder(Color northColor, Color eastColor,
|
||||
Color southColor, Color westColor,
|
||||
BorderStyle northBorderType, BorderStyle eastBorderType,
|
||||
BorderStyle southBorderType, BorderStyle westBorderType,
|
||||
boolean selected) {
|
||||
this.eastColor = eastColor;
|
||||
this.southColor = southColor;
|
||||
this.westColor = westColor;
|
||||
this.northBorderType = northBorderType;
|
||||
this.eastBorderType = eastBorderType;
|
||||
this.southBorderType = southBorderType;
|
||||
this.westBorderType = westBorderType;
|
||||
this.northBorder=northBorderType != BorderStyle.NONE;
|
||||
this.eastBorder=eastBorderType != BorderStyle.NONE;
|
||||
this.southBorder=southBorderType != BorderStyle.NONE;
|
||||
this.westBorder=westBorderType != BorderStyle.NONE;
|
||||
this.selected = selected;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintBorder(Component c, Graphics g, int x, int y, int width,
|
||||
int height) {
|
||||
Color oldColor = g.getColor();
|
||||
|
||||
|
||||
paintSelectedBorder(g, x, y, width, height);
|
||||
paintNormalBorders(g, x, y, width, height);
|
||||
paintDottedBorders(g, x, y, width, height);
|
||||
paintDashedBorders(g, x, y, width, height);
|
||||
paintDoubleBorders(g, x, y, width, height);
|
||||
paintDashDotDotBorders(g, x, y, width, height);
|
||||
|
||||
|
||||
g.setColor(oldColor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by paintBorder to paint the border of a selected cell.
|
||||
* The paramaters are the Graphics object, location and dimensions of the
|
||||
* cell.
|
||||
*/
|
||||
private void paintSelectedBorder(Graphics g, int x, int y, int width,
|
||||
int height) {
|
||||
if (selected) {
|
||||
//Need to setup thickness of 2
|
||||
g.setColor(Color.black);
|
||||
//paint the border
|
||||
g.drawRect(x,y,width-1,height-1);
|
||||
|
||||
//paint the filled rectangle at the bottom left hand position
|
||||
g.fillRect(x+width-5, y+height-5, 5, 5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by paintBorder to paint the various versions of normal line
|
||||
* borders for a cell.
|
||||
*/
|
||||
private void paintNormalBorders(Graphics g, int x, int y, int width,
|
||||
int height) {
|
||||
|
||||
if (northBorder &&
|
||||
((northBorderType == BorderStyle.THIN) ||
|
||||
(northBorderType == BorderStyle.MEDIUM) ||
|
||||
(northBorderType == BorderStyle.THICK)
|
||||
)
|
||||
) {
|
||||
|
||||
int thickness = getThickness(northBorderType);
|
||||
|
||||
g.setColor(northColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
g.drawLine(x,y+k,width,y+k);
|
||||
}
|
||||
}
|
||||
|
||||
if (eastBorder &&
|
||||
((eastBorderType == BorderStyle.THIN) ||
|
||||
(eastBorderType == BorderStyle.MEDIUM) ||
|
||||
(eastBorderType == BorderStyle.THICK)
|
||||
)
|
||||
) {
|
||||
|
||||
int thickness = getThickness(eastBorderType);
|
||||
|
||||
g.setColor(eastColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
g.drawLine(width-k,y,width-k,height);
|
||||
}
|
||||
}
|
||||
|
||||
if (southBorder &&
|
||||
((southBorderType == BorderStyle.THIN) ||
|
||||
(southBorderType == BorderStyle.MEDIUM) ||
|
||||
(southBorderType == BorderStyle.THICK)
|
||||
)
|
||||
) {
|
||||
|
||||
int thickness = getThickness(southBorderType);
|
||||
|
||||
g.setColor(southColor);
|
||||
for (int k=0; k < thickness; k++) {
|
||||
g.drawLine(x,height - k,width,height - k);
|
||||
}
|
||||
}
|
||||
|
||||
if (westBorder &&
|
||||
((westBorderType == BorderStyle.THIN) ||
|
||||
(westBorderType == BorderStyle.MEDIUM) ||
|
||||
(westBorderType == BorderStyle.THICK)
|
||||
)
|
||||
) {
|
||||
|
||||
int thickness = getThickness(westBorderType);
|
||||
|
||||
g.setColor(westColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
g.drawLine(x+k,y,x+k,height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by paintBorder to paint the dotted line
|
||||
* borders for a cell.
|
||||
*/
|
||||
private void paintDottedBorders(Graphics g, int x, int y, int width,
|
||||
int height) {
|
||||
if (northBorder &&
|
||||
northBorderType == BorderStyle.DOTTED) {
|
||||
int thickness = getThickness(northBorderType);
|
||||
|
||||
g.setColor(northColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
for (int xc = x; xc < width; xc=xc+2) {
|
||||
g.drawLine(xc,y+k,xc,y+k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (eastBorder &&
|
||||
eastBorderType == BorderStyle.DOTTED
|
||||
) {
|
||||
|
||||
int thickness = getThickness(eastBorderType);
|
||||
thickness++; //need for dotted borders to show up east
|
||||
|
||||
g.setColor(eastColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
for (int yc=y;yc < height; yc=yc+2) {
|
||||
g.drawLine(width-k,yc,width-k,yc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (southBorder &&
|
||||
southBorderType == BorderStyle.DOTTED
|
||||
) {
|
||||
|
||||
int thickness = getThickness(southBorderType);
|
||||
thickness++;
|
||||
g.setColor(southColor);
|
||||
for (int k=0; k < thickness; k++) {
|
||||
for (int xc = x; xc < width; xc=xc+2) {
|
||||
g.drawLine(xc,height-k,xc,height-k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (westBorder &&
|
||||
westBorderType == BorderStyle.DOTTED
|
||||
) {
|
||||
|
||||
int thickness = getThickness(westBorderType);
|
||||
// thickness++;
|
||||
|
||||
g.setColor(westColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
for (int yc=y;yc < height; yc=yc+2) {
|
||||
g.drawLine(x+k,yc,x+k,yc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by paintBorder to paint the various versions of dotted line
|
||||
* borders for a cell.
|
||||
*/
|
||||
private void paintDashedBorders(Graphics g, int x, int y, int width,
|
||||
int height) {
|
||||
if (northBorder &&
|
||||
((northBorderType == BorderStyle.DASHED) ||
|
||||
(northBorderType == BorderStyle.HAIR))
|
||||
) {
|
||||
int thickness = getThickness(northBorderType);
|
||||
|
||||
int dashlength = 1;
|
||||
|
||||
if (northBorderType == BorderStyle.DASHED)
|
||||
dashlength = 2;
|
||||
|
||||
g.setColor(northColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
for (int xc = x; xc < width; xc=xc+5) {
|
||||
g.drawLine(xc,y+k,xc+dashlength,y+k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (eastBorder &&
|
||||
((eastBorderType == BorderStyle.DASHED) ||
|
||||
(eastBorderType == BorderStyle.HAIR))
|
||||
) {
|
||||
|
||||
int thickness = getThickness(eastBorderType);
|
||||
thickness++; //need for dotted borders to show up east
|
||||
|
||||
|
||||
int dashlength = 1;
|
||||
|
||||
if (eastBorderType == BorderStyle.DASHED)
|
||||
dashlength = 2;
|
||||
|
||||
g.setColor(eastColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
for (int yc=y;yc < height; yc=yc+5) {
|
||||
g.drawLine(width-k,yc,width-k,yc+dashlength);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (southBorder &&
|
||||
((southBorderType == BorderStyle.DASHED) ||
|
||||
(southBorderType == BorderStyle.HAIR))
|
||||
) {
|
||||
|
||||
int thickness = getThickness(southBorderType);
|
||||
thickness++;
|
||||
|
||||
int dashlength = 1;
|
||||
|
||||
if (southBorderType == BorderStyle.DASHED)
|
||||
dashlength = 2;
|
||||
|
||||
g.setColor(southColor);
|
||||
for (int k=0; k < thickness; k++) {
|
||||
for (int xc = x; xc < width; xc=xc+5) {
|
||||
g.drawLine(xc,height-k,xc+dashlength,height-k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (westBorder &&
|
||||
((westBorderType == BorderStyle.DASHED) ||
|
||||
(westBorderType == BorderStyle.HAIR))
|
||||
) {
|
||||
|
||||
int thickness = getThickness(westBorderType);
|
||||
// thickness++;
|
||||
|
||||
int dashlength = 1;
|
||||
|
||||
if (westBorderType == BorderStyle.DASHED)
|
||||
dashlength = 2;
|
||||
|
||||
g.setColor(westColor);
|
||||
|
||||
for (int k=0; k < thickness; k++) {
|
||||
for (int yc=y;yc < height; yc=yc+5) {
|
||||
g.drawLine(x+k,yc,x+k,yc+dashlength);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by paintBorder to paint the double line
|
||||
* borders for a cell.
|
||||
*/
|
||||
private void paintDoubleBorders(Graphics g, int x, int y, int width,
|
||||
int height) {
|
||||
if (northBorder &&
|
||||
northBorderType == BorderStyle.DOUBLE) {
|
||||
|
||||
g.setColor(northColor);
|
||||
|
||||
int leftx=x;
|
||||
int rightx=width;
|
||||
|
||||
// if there are borders on the west or east then
|
||||
// the second line shouldn't cross them
|
||||
if (westBorder)
|
||||
leftx = x+3;
|
||||
|
||||
if (eastBorder)
|
||||
rightx = width-3;
|
||||
|
||||
g.drawLine(x,y,width,y);
|
||||
g.drawLine(leftx,y+2,rightx,y+2);
|
||||
}
|
||||
|
||||
if (eastBorder &&
|
||||
eastBorderType == BorderStyle.DOUBLE
|
||||
) {
|
||||
|
||||
int thickness = getThickness(eastBorderType);
|
||||
thickness++; //need for dotted borders to show up east
|
||||
|
||||
g.setColor(eastColor);
|
||||
|
||||
int topy=y;
|
||||
int bottomy=height;
|
||||
|
||||
if (northBorder)
|
||||
topy=y+3;
|
||||
|
||||
if (southBorder)
|
||||
bottomy=height-3;
|
||||
|
||||
g.drawLine(width-1,y,width-1,height);
|
||||
g.drawLine(width-3,topy,width-3,bottomy);
|
||||
}
|
||||
|
||||
if (southBorder &&
|
||||
southBorderType == BorderStyle.DOUBLE
|
||||
) {
|
||||
|
||||
g.setColor(southColor);
|
||||
|
||||
int leftx=y;
|
||||
int rightx=width;
|
||||
|
||||
if (westBorder)
|
||||
leftx=x+3;
|
||||
|
||||
if (eastBorder)
|
||||
rightx=width-3;
|
||||
|
||||
|
||||
g.drawLine(x,height - 1,width,height - 1);
|
||||
g.drawLine(leftx,height - 3,rightx,height - 3);
|
||||
}
|
||||
|
||||
if (westBorder &&
|
||||
westBorderType == BorderStyle.DOUBLE
|
||||
) {
|
||||
|
||||
int thickness = getThickness(westBorderType);
|
||||
// thickness++;
|
||||
|
||||
g.setColor(westColor);
|
||||
|
||||
int topy=y;
|
||||
int bottomy=height-3;
|
||||
|
||||
if (northBorder)
|
||||
topy=y+2;
|
||||
|
||||
if (southBorder)
|
||||
bottomy=height-3;
|
||||
|
||||
g.drawLine(x,y,x,height);
|
||||
g.drawLine(x+2,topy,x+2,bottomy);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by paintBorder to paint the various versions of dash dot dot line
|
||||
* borders for a cell.
|
||||
*/
|
||||
private void paintDashDotDotBorders(Graphics g, int x, int y, int width,
|
||||
int height) {
|
||||
if (northBorder &&
|
||||
((northBorderType == BorderStyle.DASH_DOT_DOT) ||
|
||||
(northBorderType == BorderStyle.MEDIUM_DASH_DOT_DOT))
|
||||
) {
|
||||
int thickness = getThickness(northBorderType);
|
||||
|
||||
g.setColor(northColor);
|
||||
for (int l=x; l < width;) {
|
||||
l=l+drawDashDotDot(g, l, y, thickness, true, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (eastBorder &&
|
||||
((eastBorderType == BorderStyle.DASH_DOT_DOT) ||
|
||||
(eastBorderType == BorderStyle.MEDIUM_DASH_DOT_DOT))
|
||||
) {
|
||||
|
||||
int thickness = getThickness(eastBorderType);
|
||||
|
||||
g.setColor(eastColor);
|
||||
|
||||
for (int l=y;l < height;) {
|
||||
//System.err.println("drawing east");
|
||||
l=l+drawDashDotDot(g,width-1,l,thickness,false,false);
|
||||
}
|
||||
}
|
||||
|
||||
if (southBorder &&
|
||||
((southBorderType == BorderStyle.DASH_DOT_DOT) ||
|
||||
(southBorderType == BorderStyle.MEDIUM_DASH_DOT_DOT))
|
||||
) {
|
||||
|
||||
int thickness = getThickness(southBorderType);
|
||||
|
||||
g.setColor(southColor);
|
||||
|
||||
for (int l=x; l < width;) {
|
||||
//System.err.println("drawing south");
|
||||
l=l+drawDashDotDot(g, l, height-1, thickness, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
if (westBorder &&
|
||||
((westBorderType == BorderStyle.DASH_DOT_DOT) ||
|
||||
(westBorderType == BorderStyle.MEDIUM_DASH_DOT_DOT))
|
||||
) {
|
||||
|
||||
int thickness = getThickness(westBorderType);
|
||||
|
||||
g.setColor(westColor);
|
||||
|
||||
for (int l=y;l < height;) {
|
||||
//System.err.println("drawing west");
|
||||
l=l+drawDashDotDot(g,x,l,thickness,false,true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws one dash dot dot horizontally or vertically with thickness drawn
|
||||
* incrementally to either the right or left.
|
||||
*
|
||||
* @param g graphics object for drawing with
|
||||
* @param x the x origin of the line
|
||||
* @param y the y origin of the line
|
||||
* @param thickness the thickness of the line
|
||||
* @param horizontal or vertical (true for horizontal)
|
||||
* @param right/bottom or left/top thickness (true for right or top),
|
||||
* if true then the x or y origin will be incremented to provide
|
||||
* thickness, if false, they'll be decremented. For vertical
|
||||
* borders, x is incremented or decremented, for horizontal its y.
|
||||
* Just set to true for north and west, and false for east and
|
||||
* south.
|
||||
* @returns length - returns the length of the line.
|
||||
*/
|
||||
private int drawDashDotDot(Graphics g,int x, int y, int thickness,
|
||||
boolean horizontal,
|
||||
boolean rightBottom) {
|
||||
|
||||
for (int t=0; t < thickness; t++) {
|
||||
if (!rightBottom) {
|
||||
t = 0 - t; //add negative thickness so we go the other way
|
||||
//then we'll decrement instead of increment.
|
||||
}
|
||||
if (horizontal) {
|
||||
g.drawLine(x,y+t,x+5,y+t);
|
||||
g.drawLine(x+8,y+t,x+10,y+t);
|
||||
g.drawLine(x+13,y+t,x+15,y+t);
|
||||
} else {
|
||||
g.drawLine(x+t,y,x+t,y+5);
|
||||
g.drawLine(x+t,y+8,x+t,y+10);
|
||||
g.drawLine(x+t,y+13,x+t,y+15);
|
||||
}
|
||||
}
|
||||
return 18;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns the line thickness for a border based on border type
|
||||
*/
|
||||
private int getThickness(BorderStyle thickness) {
|
||||
switch (thickness) {
|
||||
case DASH_DOT_DOT:
|
||||
case DASHED:
|
||||
case HAIR:
|
||||
return 1;
|
||||
case THIN:
|
||||
return 2;
|
||||
case MEDIUM:
|
||||
case MEDIUM_DASH_DOT_DOT:
|
||||
return 3;
|
||||
case THICK:
|
||||
return 4;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user