mirror of
https://github.com/jmcnamara/libxlsxwriter.git
synced 2026-05-15 14:15:54 -06:00
784 lines
26 KiB
Text
784 lines
26 KiB
Text
/**
|
|
@page getting_started Getting Started with libxlsxwriter
|
|
|
|
@tableofcontents
|
|
|
|
Here are some instructions to get you up and running with the libxlsxwriter
|
|
library on different OSes.
|
|
|
|
|
|
@section gsg_quick_start Quick-start on Linux
|
|
|
|
If you prefer to assemble Ikea furniture first and only read the instructions
|
|
when you have parts left over then the following minimal set of commands
|
|
should get you up and running on a Debian like system:
|
|
|
|
sudo apt-get install -y zlib1g-dev
|
|
git clone https://github.com/jmcnamara/libxlsxwriter.git
|
|
cd libxlsxwriter
|
|
make
|
|
sudo make install
|
|
|
|
If you read the instructions first and then assemble the furniture you will
|
|
know how to proceed.
|
|
|
|
|
|
@section gsg_linux Installation on Linux
|
|
|
|
@subsection gsg_dependencies Install the dependencies
|
|
|
|
The only non-optional dependency when building libxlsxwriter is [Zlib](http://www.zlib.net).
|
|
|
|
You can install `zlib` from source as follows:
|
|
|
|
curl -O -L http://www.zlib.net/zlib-1.2.11.tar.gz
|
|
tar zxf zlib-1.2.11.tar.gz
|
|
cd zlib-1.2.11
|
|
|
|
./configure
|
|
make
|
|
|
|
sudo make install
|
|
|
|
Alternatively, you can use your OS packager to install the `zlib` development
|
|
libraries. For example:
|
|
|
|
sudo apt-get install -y zlib1g-dev
|
|
|
|
The zlib version must be >= 1.2.8 to avoid compilation issues.
|
|
|
|
@note There are optional dependencies that can be installed for testing.
|
|
See @ref running_the_tests.
|
|
|
|
|
|
@subsection gsg_git Get the source code
|
|
|
|
To get the latest version of the source code you can clone the libxlsxwriter
|
|
repository from GitHub:
|
|
|
|
git clone https://github.com/jmcnamara/libxlsxwriter.git
|
|
|
|
Alternatively you can get a tarball of the latest source code as follows:
|
|
|
|
curl -O -L http://github.com/jmcnamara/libxlsxwriter/archive/master.tar.gz
|
|
|
|
|
|
@subsection gsg_build Build the source code
|
|
|
|
Build the source code as follows:
|
|
|
|
cd libxlsxwriter
|
|
make
|
|
|
|
This will create a static and dynamic library in the local `./lib` directory:
|
|
|
|
ls lib
|
|
libxlsxwriter.a libxlsxwriter.so
|
|
|
|
To see a verbose summary of the compilation steps use `V=1`:
|
|
|
|
make V=1
|
|
|
|
With CMake you can build the library as follows:
|
|
|
|
mkdir build # Or another sub-directory.
|
|
cd build
|
|
cmake ..
|
|
cmake --build .
|
|
|
|
@subsection gsg_examples Build the examples
|
|
|
|
If there weren't any warnings or errors in the previous step (and there
|
|
shouldn't have been) then you can build the programs in the `examples`
|
|
directory and try one of them out:
|
|
|
|
# With Make:
|
|
make examples
|
|
|
|
# or CMake:
|
|
mkdir build
|
|
cd build
|
|
cmake .. -DBUILD_EXAMPLES=ON
|
|
cmake --build .
|
|
|
|
# Then:
|
|
./examples/hello
|
|
|
|
This will create a `hello_world.xlsx` file in your current directory. Open the
|
|
file in a spreadsheet application. The output should look like this: @image
|
|
html hello01.png
|
|
|
|
|
|
@subsection gsg_install Install the library
|
|
|
|
Libxlsxwriter supports a simplified installation scheme for a static and
|
|
dynamic/shared library and header files.
|
|
|
|
sudo make install
|
|
|
|
The files are installed to `/usr/local` by default but this can be overridden
|
|
by using the `PREFIX` environmental variable:
|
|
|
|
make install PREFIX=/usr/third_party
|
|
|
|
A staging directory can be set with `DESTDIR` which is prepended to all
|
|
install paths. This is a an occasionally useful feature for packaging:
|
|
|
|
make install PREFIX=/usr/third_party DESTDIR=./staging/
|
|
|
|
This would build and link the code with `/usr/third_party` as the
|
|
installation location but actually install to `./staging/usr/third_party`.
|
|
|
|
With CMake you can install the library as follows:
|
|
|
|
mkdir build
|
|
cd build
|
|
cmake ..
|
|
cmake --build . --target install
|
|
|
|
@subsection gsg_using Using the library
|
|
|
|
Using your source code editor create a file like the following called
|
|
`myexcel.c`:
|
|
|
|
@code
|
|
#include "xlsxwriter.h"
|
|
|
|
int main() {
|
|
|
|
lxw_workbook *workbook = workbook_new("myexcel.xlsx");
|
|
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
|
|
int row = 0;
|
|
int col = 0;
|
|
|
|
worksheet_write_string(worksheet, row, col, "Hello me!", NULL);
|
|
|
|
return workbook_close(workbook);
|
|
}
|
|
@endcode
|
|
|
|
If you executed the install commands in the previous section then you
|
|
should be able to compile the program as follows:
|
|
|
|
cc myexcel.c -o myexcel -lxlsxwriter
|
|
|
|
In some OS environments, or if you changed the `PREFIX` location, you may
|
|
have to provide explicit `include` and `lib` paths:
|
|
|
|
cc myexcel.c -o myexcel -I/usr/local/include -L/usr/local/lib -lxlsxwriter
|
|
|
|
You can also use
|
|
[pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
|
|
(after installation of the library) to automatically determine the required
|
|
arguments and paths:
|
|
|
|
$ pkg-config --cflags --libs xlsxwriter
|
|
-I/usr/local/include -L/usr/local/lib -lxlsxwriter -lz
|
|
|
|
You can add this information to your compilation as follows:
|
|
|
|
cc myexcel.c -o myexcel `pkg-config --cflags --libs xlsxwriter`
|
|
|
|
This will create an executable that you can run to generate an Excel
|
|
spreadsheet:
|
|
|
|
./myexcel
|
|
xdg-open myexcel.xlsx
|
|
|
|
If the installation didn't work for you then you can link against the static
|
|
library you created in the "Build the source code" step:
|
|
|
|
cc myexcel.c -o myexcel -I /path/to/libxlsxwriter/include \
|
|
/path/to/libxlsxwriter/lib/libxlsxwriter.a -lz
|
|
|
|
|
|
@section gsg_macos Installation on macOS and iOS
|
|
|
|
The easiest way to install libxlsxwriter for Xcode and iOS is to use the
|
|
CocoaPods method shown in the next section.
|
|
|
|
To install libxlsxwriter from the macOS commandline requires the
|
|
[Xcode "commandline tools"](https://developer.apple.com/xcode/resources/).
|
|
You can then follow the same instructions for compiling and installing on
|
|
Linux, as shown above.
|
|
|
|
For commandline access to libxlsxwriter you can also use
|
|
[brew/homebrew](https://brew.sh), see below.
|
|
|
|
|
|
@subsection gsg_cocoapods Install using CocoaPods for Xcode
|
|
|
|
For iOS and macOS projects in Xcode you can install libxlsxwriter using
|
|
[CocoaPods](https://cocoapods.org).
|
|
|
|
Add the following entry to your `Podfile`:
|
|
|
|
pod 'libxlsxwriter', '~> 0.9'
|
|
|
|
if you are using Swift, you can now add an import:
|
|
|
|
import xlsxwriter
|
|
|
|
And call its C functions like this:
|
|
|
|
let documentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
|
|
let fileURL = documentDirectory.appendingPathComponent("hello_world.xlsx")
|
|
|
|
let workbook = workbook_new((fileURL.absoluteString.dropFirst(6) as NSString).fileSystemRepresentation)
|
|
let worksheet = workbook_add_worksheet(workbook, nil)
|
|
worksheet_write_string(worksheet, 0, 0, "Hello", nil)
|
|
worksheet_write_number(worksheet, 1, 0, 123, nil)
|
|
workbook_close(workbook)
|
|
|
|
For a sample Xcode project that uses the libxlsxwriter cocoapod for iOS and
|
|
macOS with Objective-C and Swift see [libxlsxwriter Cocoa
|
|
Examples](https://github.com/lrossi/libxlsxwriterCocoaExamples) or
|
|
[LibXlsxWriterSwiftSample](https://github.com/FrankenApps/LibXlsxWriterSwiftSample).
|
|
|
|
|
|
@subsection gsg_brew Installation on macOS with homebrew
|
|
|
|
On macOS you can also use [brew/homebrew](https://brew.sh):
|
|
|
|
brew install libxlsxwriter
|
|
|
|
Once installed you can compile and run a libxlsxwriter program as follows:
|
|
|
|
cc myexcel.c -o myexcel -I/usr/local/include -L/usr/local/lib -lxlsxwriter
|
|
./myexcel
|
|
|
|
@section gsg_windows Installation on Windows
|
|
|
|
There are several ways to compile libxlsxwriter on and for Windows, see below.
|
|
|
|
|
|
@subsection gsg_vcpkg Using vcpkg for Microsoft Visual Studio
|
|
|
|
The most convenient way to get the latest release version of libxlsxwriter and
|
|
integrate it into your Visual Studio build environment is to use the
|
|
[vcpkg](https://vcpkg.io) tool:
|
|
|
|
> vcpkg is a free C/C++ package manager for acquiring and managing
|
|
> libraries. Choose from over 1500 open source libraries to download and build
|
|
> in a single step or add your own private libraries to simplify your build
|
|
> process. Maintained by the Microsoft C++ team and open source contributors.
|
|
|
|
|
|
Install vcpkg and libxlsxwriter as follows in Windows CMD or Powershell:
|
|
|
|
git clone https://github.com/microsoft/vcpkg.git
|
|
cd vcpkg
|
|
bootstrap-vcpkg.bat
|
|
vcpkg install libxlsxwriter
|
|
|
|
You should then see libxlsxwriter installed as follows (note that the required
|
|
zlib dependency has also been installed):
|
|
|
|
vcpkg list
|
|
|
|
libxlsxwriter:x86-windows 0.8.6-1 Libxlsxwriter is a C library that ...
|
|
zlib:x86-windows 1.2.11-5 A compression library
|
|
|
|
You can also install libxlsxwriter for other build targets like `x64`
|
|
|
|
vcpkg install libxlsxwriter:x64-windows
|
|
|
|
vcpkg list
|
|
|
|
libxlsxwriter:x64-windows 1.1.4 Libxlsxwriter is a C library that ...
|
|
libxlsxwriter:x86-windows 1.1.4 Libxlsxwriter is a C library that ...
|
|
zlib:x64-windows 1.2.11#13 A compression library
|
|
zlib:x86-windows 1.2.11#13 A compression library
|
|
|
|
To use libxlsxwriter from within Visual Studio you can "integrate" it into
|
|
your environment:
|
|
|
|
vcpkg integrate install
|
|
|
|
Applied user-wide integration for this vcpkg root.
|
|
|
|
All MSBuild C projects can now include libxlsxwriter directly. Linking will
|
|
also be handled automatically. For example, create a new Win32 Console (or
|
|
other C/C++) application in Visual Studio:
|
|
|
|
File
|
|
-> New
|
|
-> Project
|
|
|
|
Visual C++
|
|
-> Win32
|
|
-> Win32 Console Application
|
|
|
|
Replace the empty main with a libxlsxwriter example from the distro. For
|
|
example:
|
|
|
|
@code
|
|
// Some older versions on Visual Studio may need "stdafx.h".
|
|
// #include "stdafx.h"
|
|
|
|
#include "xlsxwriter.h"
|
|
|
|
int main() {
|
|
|
|
lxw_workbook *workbook = workbook_new("hello_world.xlsx");
|
|
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
|
|
|
|
worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
|
|
worksheet_write_number(worksheet, 1, 0, 123, NULL);
|
|
|
|
workbook_close(workbook);
|
|
|
|
return 0;
|
|
}
|
|
@endcode
|
|
|
|
Change the target to "Release" and the architecture to "x86" or "x64"
|
|
(depending on the version you installed above). You can now "Build Solution".
|
|
The resulting executable will be put in the output directory with the required
|
|
"xlsxwriter.dll" and "zlib1.dll" files.
|
|
|
|
|
|
@subsection gsg_cmake_app Using CMake for Microsoft Visual Studio
|
|
|
|
For a more manual installation, and for older versions of Microsoft Visual
|
|
Studio or Windows, you can use CMake as shown below.
|
|
|
|
Open a Windows CMD or Command Window and set up your MSVC environment, if
|
|
required. Something like this:
|
|
|
|
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
|
|
|
|
# Or:
|
|
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
|
|
|
|
Then create a work directory and an install directory that the include and
|
|
library files will be installed to. Set the follow variables to point to the
|
|
directories:
|
|
|
|
set WORK_DIR=C:/Users/Username/tmp
|
|
set INSTALL_DIR=C:/Users/Username/tmp/install_dir
|
|
|
|
Build the Zlib library:
|
|
|
|
cd %WORK_DIR%
|
|
|
|
git clone https://github.com/madler/zlib.git
|
|
cd zlib
|
|
mkdir build
|
|
cd build
|
|
|
|
cmake .. -G "Visual Studio 14 Win64" -DCMAKE_INSTALL_PREFIX:PATH="%INSTALL_DIR%/zlib"
|
|
|
|
cmake --build . --config Release --target install
|
|
|
|
Build the libxlsxwriter library:
|
|
|
|
cd %WORK_DIR%
|
|
|
|
git clone https://github.com/jmcnamara/libxlsxwriter.git
|
|
cd libxlsxwriter
|
|
mkdir build
|
|
cd build
|
|
|
|
cmake .. -G "Visual Studio 14 Win64" -DCMAKE_INSTALL_PREFIX:PATH="%INSTALL_DIR%/libxlsxwriter" -DZLIB_ROOT:STRING="%INSTALL_DIR%/zlib"
|
|
|
|
cmake --build . --config Release --target install
|
|
|
|
|
|
Create a new Win32 Console (or other C/C++) application in Visual Studio:
|
|
|
|
File
|
|
-> New
|
|
-> Project
|
|
|
|
Visual C++
|
|
-> Win32
|
|
-> Win32 Console Application
|
|
|
|
|
|
Change the ARCH in the main Dialog to "x64" and the Configuration to "Release"
|
|
(or to match the parameters to cmake).
|
|
|
|
Replace the empty main with a libxlsxwriter example from the distro. Make sure
|
|
to include "stdafx.h" and "xlsxwriter.h":
|
|
|
|
@code
|
|
#include "stdafx.h" // This may not be required.
|
|
|
|
#include "xlsxwriter.h"
|
|
|
|
int main() {
|
|
|
|
lxw_workbook *workbook = workbook_new("hello_world.xlsx");
|
|
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
|
|
|
|
worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
|
|
worksheet_write_number(worksheet, 1, 0, 123, NULL);
|
|
|
|
workbook_close(workbook);
|
|
|
|
return 0;
|
|
}
|
|
@endcode
|
|
|
|
Edit the application properties:
|
|
|
|
Project
|
|
-> ConsoleApplication Properties
|
|
|
|
Set the libxlsxwriter include path to match the path used above:
|
|
|
|
Configuration Properties
|
|
-> C/C++
|
|
-> General
|
|
-> Additional Include Directories
|
|
|
|
Set it to the following (or similar path used above):
|
|
|
|
C:\Users\Username\tmp\install_dir\libxlsxwriter\include
|
|
|
|
Set the linker directories to match the path created above:
|
|
|
|
Configuration Properties
|
|
-> Linker
|
|
-> General
|
|
-> Additional Library Directories
|
|
|
|
Add the following (or similar paths used above):
|
|
|
|
C:\Users\Username\tmp\install_dir\libxlsxwriter\lib\x64\Release
|
|
C:\Users\Username\tmp\install_dir\zlib\lib
|
|
|
|
Set the linker additional libraries to match the zlib and xlsxwriter libs
|
|
created above:
|
|
|
|
Configuration Properties
|
|
-> Linker
|
|
-> Input
|
|
-> Additional Dependencies
|
|
|
|
Add the following:
|
|
|
|
xlsxwriter.lib
|
|
zlib.lib
|
|
|
|
Build the solution and run the output executable. It should create a
|
|
hello_world.xlsx file in the same directory you ran it from.
|
|
|
|
|
|
@subsection gsg_ming Installation on Windows using Mingw-w64 and MSYS2
|
|
|
|
The libxlsxwriter library can also be compiled on Windows using the
|
|
[Mingw-w64](http://mingw-w64.org/doku.php) "Minimalist GNU for Windows"
|
|
toolchain. These tools can be run from the Windows `cmd.exe` but it is
|
|
recommended to use the [MSYS2](http://msys2.github.io) "Minimal System" Bourne
|
|
Shell.
|
|
|
|
Here are some instructions on how to compile libxlsxwriter with Mingw-w64 and
|
|
MSYS2:
|
|
|
|
# Install MSYS2 64 or 32 bit from http://msys2.github.io/
|
|
|
|
# Install the dev tools for libxlsxwriter.
|
|
pacman -S git gcc make zlib-devel
|
|
|
|
# Clone and build libxlsxwriter.
|
|
git clone https://github.com/jmcnamara/libxlsxwriter.git
|
|
cd libxlsxwriter/
|
|
make
|
|
|
|
By default the library is installed in `/usr/local` on MinGW/MSYS systems. If
|
|
you know how to extend your build environments to use that directory then you
|
|
can just run `make install`. However, it is generally causes less compile/link
|
|
issues if you install them in the `/usr` directory like this:
|
|
|
|
make install PREFIX=/usr
|
|
|
|
After compilation you can follow the instructions in the @ref gsg_using
|
|
section above. When compiling with the library you may also need to link
|
|
against the zlib library using `-lz`:
|
|
|
|
gcc myexcel.c -o myexcel -lxlsxwriter -lz
|
|
|
|
It is also possible to use [Cygwin](https://cygwin.com) and the older [MinGW
|
|
and MSYS](http://mingw.org). Libxlsxwriter has been confirmed to compile and
|
|
work in all of these environments.
|
|
|
|
See also @ref gsg_tmpdir.
|
|
|
|
@subsection gsg_qt Installation in Qt-Creator for Windows
|
|
|
|
The following external guide shows how to [Build libxlsxwriter inside
|
|
Qt-Creator for Windows](https://github.com/jmcnamara/libxlsxwriter/issues/270)
|
|
with step by step instructions.
|
|
|
|
@section gsg_bsd Installation on FreeBSD and OpenBSD
|
|
|
|
Installation on FreeBSD and OpenBSD is mainly the same as on @ref gsg_linux
|
|
"Linux". To compile the library @ref gsg_git "get the source code" and build it
|
|
using **gmake** (not make):
|
|
|
|
cd libxlsxwriter
|
|
gmake
|
|
|
|
Then follow the instructions in the Linux section to @ref gsg_install
|
|
"install" and @ref gsg_using "use" the library.
|
|
|
|
Both FreeBSD and OpenBSD come with the zlib development libraries
|
|
pre-installed so there are no additional dependencies. However, if you have
|
|
any issues then follow the instructions to @ref gsg_dependencies "install zlib".
|
|
|
|
|
|
@section gsg_compilation_options Compilation Options
|
|
|
|
As shown in the previous sections Libxlsxwriter provides both a Make and
|
|
CMake based build system. The Make build is a straightforward system for
|
|
building the library and running tests on Unix like systems. The CMake system
|
|
offers support for more operating systems, cross compilation, and integration
|
|
with larger CMake builds. In particular it enables building on Windows.
|
|
|
|
The following are various compilation targets and options for both build systems:
|
|
|
|
| Make | CMake | Description |
|
|
| :----------------------- | :----------------------------------------- | :-------------------------------------------------------- |
|
|
| `examples` | `-DBUILD_EXAMPLES=ON` | Build the example |
|
|
| `test` | `-DBUILD_TESTS=ON` | Build the tests |
|
|
| `USE_DTOA_LIBRARY=1` | `-DUSE_DTOA_LIBRARY=ON` | Use alternative double in sprintf |
|
|
| `USE_MEM_FILE=1` | `-DUSE_MEM_FILE=ON` | Use `fmemopen()`/`open_memstream()` instead of temp files |
|
|
| `USE_OPENSSL_MD5=1` | `-DUSE_OPENSSL_MD5=ON` | Use OpenSSL for MD5 digest |
|
|
| `USE_NO_MD5=1` | `-DUSE_NO_MD5=ON` | Don't use a MD5 digest |
|
|
| `USE_SYSTEM_MINIZIP=1` | `-DUSE_SYSTEM_MINIZIP=ON` | Use system minzip library |
|
|
| `USE_STANDARD_TMPFILE=1` | `-DUSE_STANDARD_TMPFILE=ON` | Use system `tmpfile()` function |
|
|
| `USE_BIG_ENDIAN=1` | `-DUSE_BIG_ENDIAN=ON` | Build on big endian systems |
|
|
| `universal_binary` | `-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"` | Create a macOS "Universal Binary" |
|
|
| | `-DBUILD_SHARED_LIBS=ON` | Build shared library (default on) |
|
|
| | `-DUSE_STATIC_MSVC_RUNTIME=ON` | Use static msvc runtime library |
|
|
| | `-DCMAKE_BUILD_TYPE=Release` | Set the build type. |
|
|
|
|
|
|
The compilation options would be used as follows:
|
|
|
|
# Make
|
|
make examples USE_DTOA_LIBRARY=1
|
|
|
|
# CMake
|
|
mkdir build
|
|
cd build
|
|
cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON -DUSE_DTOA_LIBRARY=ON
|
|
cmake --build . --config Release
|
|
|
|
Each of the options are explained below:
|
|
|
|
- `examples/BUILD_EXAMPLES`: Builds the @ref examples "example programs".
|
|
|
|
- `test/BUILD_TESTS`: Builds the tests (see @ref running_the_tests). With Make
|
|
the tests are also run once they are compiled. With CMake you can run them
|
|
using `ctest`.
|
|
|
|
- `USE_DTOA_LIBRARY`: See @ref gsg_dtoa "using a double formatting library".
|
|
|
|
- `USE_MEM_FILE`: Use fmemopen()/open_memstream() instead of temporary files.
|
|
This option isn't on by default since it isn't supported on Windows.
|
|
|
|
- `USE_OPENSSL_MD5`: Uses OpenSSL to provide a MD5 digest of image files in
|
|
order to avoid storing duplicates. See @ref gsg_md5.
|
|
|
|
- `USE_NO_MD5`: Don't use a MD5 digest of image files in order to remove
|
|
duplicates. This can be used if you aren't handling image files and don't
|
|
need the additional function in the library. See @ref gsg_md5.
|
|
|
|
- `USE_SYSTEM_MINIZIP`: Uses a system minizip library, rather than the
|
|
included copy, to create the xlsx zip container. See @ref gsg_minizip.
|
|
|
|
- `USE_STANDARD_TMPFILE`: Uses the standard library `tmpfile()` function
|
|
to handle temp files instead of `tmpfileplus`. See @ref gsg_tmpdir.
|
|
|
|
- `USE_BIG_ENDIAN`: Compiles libxlsxwriter on a big endian system. See @ref
|
|
gsg_endian.
|
|
|
|
- `universal_binary/CMAKE_OSX_ARCHITECTURES`: Builds a "universal binary" for
|
|
both Apple silicon and Intel-based Macs. See @ref gsg_universal.
|
|
|
|
- `BUILD_SHARED_LIBS`: Builds a dynamically loading version of the library
|
|
(`.so`, `.dll` or `.dylib` depending on the operating system).
|
|
|
|
- `USE_STATIC_MSVC_RUNTIME`: Sets flags for Microsoft Visual C to use a static
|
|
MSVC runtime.
|
|
|
|
- `CMAKE_BUILD_TYPE`: Sets the build type (generally `Release` or `Debug`).
|
|
|
|
You can view, and set, your CMake options from within your build directory
|
|
using the `ccmake` tool:
|
|
|
|
ccmake .
|
|
|
|
|
|
@subsection gsg_dtoa Using a double formatting library
|
|
|
|
Excel uses an IEEE 754 doubles for all numeric values. These values are stored
|
|
in standard `sprintf(...,"%.16G",...)` formatting as numbers like "1234.56" or
|
|
"456E+123". However in some locales, such as "de_DE" these numbers can be
|
|
stored with the locale specific decimal place like "1234,56" which causes
|
|
Excel to give an error when it loads the file.
|
|
|
|
It some cases this issue can be resolved by using the `setlocale()` or
|
|
`uselocale()` functions in your application. Alternatively you can compile
|
|
libxlsxwriter with support for a third party `dtoa()` (decimal to ascii)
|
|
function. Currently libxlsxwriter uses the [Milo Yip DTOA
|
|
library](https://github.com/miloyip/dtoa-benchmark) as an optional
|
|
compilation. This avoids the locale sprintf issue and it is also 40-50% faster
|
|
than the standard dtoa for raw numeric data.
|
|
|
|
|
|
@subsection gsg_md5 MD5 functionality for handling duplicate images
|
|
|
|
Libxlsxwriter uses a an MD5 digest to avoid including duplicate image files in
|
|
the xlsx file. By default it uses a third party library, [Openwall
|
|
MD5](https://openwall.info/wiki/people/solar/software/public-domain-source-code/md5),
|
|
which is a fast portable implementation of the MD5 Algorithm and which uses
|
|
the same function prototypes as OpenSSL MD5 digest. See @ref license.
|
|
|
|
The Openwall MD5 code is included in the libxlsxwriter repo and compiled in by
|
|
default. If you don't want to use this code, and the additional license, you
|
|
can use OpenSSL's MD5 functions dynamically by using the `USE_OPENSSL_MD5`
|
|
option:
|
|
|
|
make USE_OPENSSL_MD5=1
|
|
|
|
# or:
|
|
cmake .. -DUSE_OPENSSL_MD5=ON
|
|
|
|
This requires that you have the OpenSSL development libraries installed and on
|
|
paths known to your compiler.
|
|
|
|
If this MD5 functionality isn't required it is possible to compile
|
|
libxlsxwriter without image de-duplication by using the `USE_NO_MD5=1` option:
|
|
|
|
make USE_NO_MD5=1
|
|
|
|
# or:
|
|
cmake .. -DUSE_NO_MD5=ON
|
|
|
|
@subsection gsg_minizip Linking against system minizip
|
|
|
|
Libxlsxwriter uses the `minizip` component of [Zlib](http://www.zlib.net) to
|
|
create the xlsx zip file container. The source files for `minizip` are
|
|
included in the src tree of libxlsxwriter and are statically linked by
|
|
default.
|
|
|
|
If you have a `lminizip` library already installed on your system and prefer
|
|
to dynamically link against that you can use the following compilation option:
|
|
|
|
make USE_SYSTEM_MINIZIP=1
|
|
|
|
# or:
|
|
cmake .. -DUSE_SYSTEM_MINIZIP=ON
|
|
|
|
|
|
@subsection gsg_tmpdir Specifying a TEMP directory for libxlsxwriter
|
|
|
|
The libxlsxwriter library creates temporary files in the system `TEMP`
|
|
directory during assembly of an xlsx file. On Windows this directory may not
|
|
be writeable by a libxlsxwriter application (although it will try several
|
|
`TEMP` locations before returning an error). To work around this you can set
|
|
the `tmpdir` parameter of the #lxw_workbook_options struct and pass it to
|
|
`workbook_new_opt()`:
|
|
|
|
@code
|
|
lxw_workbook_options options = {.constant_memory = LXW_FALSE,
|
|
.tmpdir = "C:\\Temp"};
|
|
|
|
lxw_workbook *workbook = workbook_new_opt("filename.xlsx", &options);
|
|
@endcode
|
|
|
|
This can also be used on Unix systems where the `TEMP` directory isn't
|
|
writeable.
|
|
|
|
The TEMP file handling with optional temporary directory support is provided
|
|
by the
|
|
[Tmpfileplus](http://www.di-mgt.com.au/c_function_to_create_temp_file.html)
|
|
library which is included in the source tree. If you wish to use the standard
|
|
library `tmpfile()` function instead you can compile without `tmpfileplus` as
|
|
follows:
|
|
|
|
make USE_STANDARD_TMPFILE=1
|
|
|
|
# or:
|
|
cmake .. -DUSE_STANDARD_TMPFILE=ON
|
|
|
|
@note When using the the standard library `tmpfile()` the `tmpdir` parameter,
|
|
shown above, is ignored.
|
|
|
|
@subsection gsg_endian Compiling on Big Endian Architecture
|
|
|
|
Libxlsxwriter can be compiled on a big endian system as follows:
|
|
|
|
make USE_BIG_ENDIAN=1
|
|
|
|
# or:
|
|
cmake .. -DUSE_BIG_ENDIAN=ON
|
|
|
|
@subsection gsg_universal Compiling a universal binary on macOS
|
|
|
|
With Xcode 12.2 and later you can compile libxlsxwriter as a "universal
|
|
binary" for both Apple silicon and Intel-based Macs, i.e., arm64 and x86_64.
|
|
|
|
You can compile a universal binary with standard make as follows:
|
|
|
|
$ make universal_binary
|
|
|
|
# Which gives:
|
|
$ lipo -archs lib/libxlsxwriter.a
|
|
x86_64 arm64
|
|
|
|
$ lipo -archs lib/libxlsxwriter.dylib
|
|
x86_64 arm64
|
|
|
|
Or with CMake:
|
|
|
|
mkdir build
|
|
cd build
|
|
cmake .. -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
|
|
make
|
|
|
|
|
|
@subsection gsg_minimal Minimal dependency compilation
|
|
|
|
As explained in the previous sections Libxlsxwriter includes 3 additional
|
|
libraries within the `third_party` directory:
|
|
|
|
1. `md5`: Used for MD5 hashing to avoid including duplicate images. See @ref
|
|
gsg_md5.
|
|
|
|
2. `minizip`: Uses creating the xlsx zip container (this is part of the zlib
|
|
code base but generally packaged separately). See @ref gsg_minizip.
|
|
|
|
3. `tmpfileplus`: Used mainly to overcome temp file issues on Windows but also
|
|
used for changing the default temp directory. See @ref gsg_tmpdir.
|
|
|
|
These components are included in the libxlsxwriter repository to ensure that
|
|
the library compiles and runs on as many OSes as possible with the least
|
|
amount of additional dependencies.
|
|
|
|
However, all of these are optional and a minimal version of libxlsxwriter can
|
|
be compiled without them by relying on external libraries as follows:
|
|
|
|
# Make:
|
|
make USE_OPENSSL_MD5=1 USE_SYSTEM_MINIZIP=1 USE_STANDARD_TMPFILE=1
|
|
|
|
# CMake:
|
|
mkdir build
|
|
cd build
|
|
cmake .. -DUSE_OPENSSL_MD5=ON -DUSE_SYSTEM_MINIZIP=ON -DUSE_STANDARD_TMPFILE=ON
|
|
cmake --build .
|
|
|
|
@section gsg_next Next steps
|
|
|
|
Once you get libxlsxwriter built and working the next sections will show you
|
|
how to create some more in-depth examples.
|
|
|
|
|
|
Next: @ref tutorial01
|
|
|
|
|
|
*/
|