Utilities Interface

The Utilities interface provides helper functions for string conversion, coordinate transformation, color encoding/decoding, and date/time operations.

Global Functions

const char *run_msg()

Get library runtime message.

Returns:

Constant string containing runtime message

String Conversion

int to_ansi_string(const char *utf8_string, char *sp)

Convert UTF-8 string to ANSI string.

Parameters:
  • utf8_string – Input UTF-8 string

  • sp – Output buffer for ANSI string

Returns:

Length of converted string, or -1 if failed

int to_wide_string(const char *utf8_string, wchar_t *wsp)

Convert UTF-8 string to wide character string.

Parameters:
  • utf8_string – Input UTF-8 string

  • wsp – Output buffer for wide string

Returns:

Length of converted string, or -1 if failed

Cell Reference Conversion

int a1_to_row_col(const char *s, int *row, int *col)

Convert A1-style cell reference to row and column indices.

Parameters:
  • s – A1-style reference (e.g., “A1”, “B10”)

  • row – Pointer to store row index (1-based)

  • col – Pointer to store column index (1-based)

Returns:

1 if successful, 0 if failed

int wide_a1_to_row_col(const wchar_t *ws, int *row, int *col)

Convert wide character A1-style cell reference to row and column indices.

Parameters:
  • ws – Wide character A1-style reference

  • row – Pointer to store row index (1-based)

  • col – Pointer to store column index (1-based)

Returns:

1 if successful, 0 if invalid format

int row_col_to_a1(int row, int col, char *sp)

Convert row and column indices to A1-style cell reference.

Parameters:
  • row – Row index (1-based)

  • col – Column index (1-based)

  • sp – Output buffer for A1-style reference

Returns:

Length of generated string, or 0 if failed

Color Encoding and Decoding

void decode_rgb(long rgb, int *red, int *green, int *blue)

Decode RGB color value into separate color components.

Parameters:
  • rgb – RGB color value (0x00RRGGBB format)

  • red – Pointer to store red component (0-255)

  • green – Pointer to store green component (0-255)

  • blue – Pointer to store blue component (0-255)

long encode_rgb(int red, int green, int blue)

Encode separate color components into RGB color value.

Parameters:
  • red – Red component (0-255)

  • green – Green component (0-255)

  • blue – Blue component (0-255)

Returns:

RGB color value (0x00RRGGBB format)

void decode_argb(long argb, int *red, int *green, int *blue, int *alpha)

Decode ARGB color value into separate color components.

Parameters:
  • argb – ARGB color value (0xAARRGGBB format)

  • red – Pointer to store red component (0-255)

  • green – Pointer to store green component (0-255)

  • blue – Pointer to store blue component (0-255)

  • alpha – Pointer to store alpha component (0-255)

long encode_argb(int red, int green, int blue, int alpha)

Encode separate color components into ARGB color value.

Parameters:
  • red – Red component (0-255)

  • green – Green component (0-255)

  • blue – Blue component (0-255)

  • alpha – Alpha component (0-255)

Returns:

ARGB color value (0xAARRGGBB format)

Date and Time Operations

void decode_date(double date, int *year, int *month, int *day)

Decode Excel date value into year, month, and day components (1900 date system).

Parameters:
  • date – Excel date value

  • year – Pointer to store year

  • month – Pointer to store month (1-12)

  • day – Pointer to store day (1-31)

void decode_date1904(double date, int *year, int *month, int *day)

Decode Excel date value into year, month, and day components (1904 date system).

Parameters:
  • date – Excel date value

  • year – Pointer to store year

  • month – Pointer to store month (1-12)

  • day – Pointer to store day (1-31)

void decode_time(double time, int *hour, int *minute, int *second, int *msec)

Decode Excel time value into time components (1900 date system).

Parameters:
  • time – Excel time value

  • hour – Pointer to store hour (0-23)

  • minute – Pointer to store minute (0-59)

  • second – Pointer to store second (0-59)

  • msec – Pointer to store millisecond (0-999)

void decode_datetime(double datetime, int *year, int *month, int *day, int *hour, int *minute, int *second, int *msec)

Decode Excel datetime value into date and time components (1900 date system).

Parameters:
  • datetime – Excel datetime value

  • year – Pointer to store year

  • month – Pointer to store month (1-12)

  • day – Pointer to store day (1-31)

  • hour – Pointer to store hour (0-23)

  • minute – Pointer to store minute (0-59)

  • second – Pointer to store second (0-59)

  • msec – Pointer to store millisecond (0-999)

void decode_datetime1904(double datetime, int *year, int *month, int *day, int *hour, int *minute, int *second, int *msec)

Decode Excel datetime value into date and time components (1904 date system).

Parameters:
  • datetime – Excel datetime value

  • year – Pointer to store year

  • month – Pointer to store month (1-12)

  • day – Pointer to store day (1-31)

  • hour – Pointer to store hour (0-23)

  • hour – Pointer to store hour (0-23)

  • minute – Pointer to store minute (0-59)

  • second – Pointer to store second (0-59)

  • msec – Pointer to store millisecond (0-999)

double encode_date(int year, int month, int day)

Encode year, month, and day into Excel date value (1900 date system).

Parameters:
  • year – Year

  • month – Month (1-12)

  • day – Day (1-31)

Returns:

Excel date value (Return the minimum value of double type if failed).

double encode_time(int hour, int minute, int second, int msec)

Encode time components into Excel time value.

Parameters:
  • hour – Hour (0-23)

  • minute – Minute (0-59)

  • second – Second (0-59)

  • msec – Millisecond (0-999)

Returns:

Excel time value (Return the minimum value of double type if failed).

double encode_datetime(int year, int month, int day, int hour, int minute, int second, int msec)

Encode date and time components into Excel datetime value (1900 date system).

Parameters:
  • year – Year

  • month – Month (1-12)

  • day – Day (1-31)

  • hour – Hour (0-23)

  • minute – Minute (0-59)

  • second – Second (0-59)

  • msec – Millisecond (0-999)

Returns:

Excel datetime value (Return the minimum value of double type if failed).

Usage Examples

String Conversion

#include "utils.h"

// Convert UTF-8 to ANSI
char ansi_buf[256];
int len = to_ansi_string("UTF-8 文本", ansi_buf);

// Convert UTF-8 to wide string
wchar_t wide_buf[256];
len = to_wide_string("UTF-8 文本", wide_buf);

Cell Reference Conversion

#include "utils.h"

// Convert A1 to row/col
int row, col;
if (a1_to_row_col("B10", &row, &col) == 0) {
    // row = 9, col = 1 (0-based)
}

// Convert row/col to A1
char a1_buf[16];
row_col_to_a1(9, 1, a1_buf);
// a1_buf = "B10"

Color Operations

#include "utils.h"

// Decode RGB color
int r, g, b;
decode_rgb(0x00FF0000, &r, &g, &b);
// r = 255, g = 0, b = 0

// Encode RGB color
long red_color = encode_rgb(255, 0, 0);
// red_color = 0x00FF0000

// Decode ARGB color
int a, r, g, b;
decode_argb(0x80FF0000, &r, &g, &b, &a);
// a = 128 (50% opacity), r = 255, g = 0, b = 0

Date/Time Operations

#include "utils.h"

// Decode date
int year, month, day;
decode_date(44197.0, &year, &month, &day);
// year = 2021, month = 1, day = 1

// Encode date
double excel_date = encode_date(2021, 1, 1);
// excel_date ≈ 44197.0

// Decode time
int hour, minute, second, msec;
decode_time(0.5, &hour, &minute, &second, &msec);
// hour = 12, minute = 0, second = 0, msec = 0

// Encode datetime
double excel_datetime = encode_datetime(2021, 1, 1, 12, 30, 0, 0);
// excel_datetime ≈ 44197.520833

Notes

  • Excel uses different date systems: 1900 (Windows) and 1904 (Mac)

  • In 1900 system, Excel incorrectly treats 1900 as a leap year

  • RGB colors use 0x00RRGGBB format, ARGB uses 0xAARRGGBB

  • String conversion functions require properly sized output buffers

  • All row and column indices are 1-based in these utility functions