225 lines
4.8 KiB
C++
225 lines
4.8 KiB
C++
// Worksheet.cpp : Implementation of CWorksheet
|
|
|
|
#include "stdafx.h"
|
|
#include "SLNKWorksheet.h"
|
|
#include "SLNKWorkbook.h"
|
|
|
|
#include<ATLComTime.h>
|
|
|
|
// CWorksheet
|
|
|
|
STDMETHODIMP CWorksheet::InterfaceSupportsErrorInfo(REFIID riid)
|
|
{
|
|
static const IID* const arr[] =
|
|
{
|
|
&IID_IWorksheet
|
|
};
|
|
|
|
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
|
|
{
|
|
if (InlineIsEqualGUID(*arr[i],riid))
|
|
return S_OK;
|
|
}
|
|
return S_FALSE;
|
|
}
|
|
|
|
|
|
CWorksheet::CWorksheet()
|
|
{
|
|
m_worksheet = NULL;
|
|
}
|
|
|
|
HRESULT CWorksheet::invalid()
|
|
{
|
|
return myAtlReportError(GetObjectCLSID(), "Worksheet must be created from workbook with add_worksheet");
|
|
|
|
}
|
|
STDMETHODIMP CWorksheet::SetName(BSTR sheetname)
|
|
{
|
|
m_worksheet = workbook_add_worksheet(my_workbook->m_workbook, CString(sheetname));
|
|
|
|
worksheet_ignore_errors(m_worksheet, LXW_IGNORE_NUMBER_STORED_AS_TEXT, "A1:XFD1048576");
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CWorksheet::freeze_panes(ULONG row, USHORT col)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
worksheet_freeze_panes(m_worksheet, row, col);
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CWorksheet::write_string(ULONG row, USHORT col, BSTR string, ULONG format, LONG *pVal)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
lxw_format *fmt = NULL;
|
|
switch (format)
|
|
{
|
|
case 0:
|
|
fmt = NULL;
|
|
break;
|
|
case 1:
|
|
fmt = my_workbook->m_format_bold;
|
|
break;
|
|
}
|
|
|
|
// Let op: Die string moet echt UTF-8 encoded zijn!
|
|
COLE2T pszUTF8(string, CP_UTF8);
|
|
::worksheet_write_string(m_worksheet, row, col, pszUTF8, fmt);
|
|
|
|
SIZE sz;
|
|
GetTextExtentPoint32(my_workbook->m_myDC, pszUTF8, (int)strlen(pszUTF8), &sz);
|
|
*pVal = sz.cx;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CWorksheet::write_number(ULONG row, USHORT col, DOUBLE number, ULONG format)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
lxw_format *fmt = NULL;
|
|
switch (format)
|
|
{
|
|
case 0:
|
|
fmt = NULL;
|
|
break;
|
|
case 1:
|
|
fmt = my_workbook->m_format_float2;
|
|
break;
|
|
}
|
|
::worksheet_write_number(m_worksheet, row, col, number, fmt);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CWorksheet::write_unixtime(ULONG row, USHORT col, LONG64 unixtime, ULONG format)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
lxw_format *fmt = NULL;
|
|
switch (format)
|
|
{
|
|
case 0:
|
|
fmt = my_workbook->m_format_date;
|
|
worksheet_set_column(m_worksheet, col, col, 10.0, NULL);
|
|
break;
|
|
case 1:
|
|
fmt = my_workbook->m_format_datetime;
|
|
worksheet_set_column(m_worksheet, col, col, 15.0, NULL);
|
|
break;
|
|
case 2:
|
|
fmt = my_workbook->m_format_time;
|
|
worksheet_set_column(m_worksheet, col, col, 5.0, NULL);
|
|
break;
|
|
}
|
|
::worksheet_write_unixtime(m_worksheet, row, col, unixtime, fmt);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
// In JavaScript gebruik je new Date().getVarDate();
|
|
STDMETHODIMP CWorksheet::write_vardate(ULONG row, USHORT col, DATE date, ULONG format)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
COleDateTime odt(date);
|
|
lxw_datetime ldt = { odt.GetYear(), odt.GetMonth(), odt.GetDay() , odt.GetHour(), odt.GetMinute(), (double) odt.GetSecond()};
|
|
|
|
lxw_format* fmt = NULL;
|
|
switch (format)
|
|
{
|
|
case 0:
|
|
fmt = my_workbook->m_format_date;
|
|
ldt.hour = 0;
|
|
ldt.min = 0;
|
|
ldt.sec = 0.0;
|
|
worksheet_set_column(m_worksheet, col, col, 10.0, NULL);
|
|
break;
|
|
case 1:
|
|
fmt = my_workbook->m_format_datetime;
|
|
worksheet_set_column(m_worksheet, col, col, 15.0, NULL);
|
|
break;
|
|
case 2:
|
|
ldt.year = 0;
|
|
ldt.month = 0;
|
|
ldt.day = 0;
|
|
fmt = my_workbook->m_format_time;
|
|
worksheet_set_column(m_worksheet, col, col, 5.0, NULL);
|
|
break;
|
|
}
|
|
::worksheet_write_datetime(m_worksheet, row, col, &ldt, fmt);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CWorksheet::set_column_width(USHORT col, DOUBLE number, ULONG format)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
lxw_format *fmt = NULL;
|
|
switch (format)
|
|
{
|
|
case 1:
|
|
fmt = my_workbook->m_format_text_wrap;
|
|
break;
|
|
}
|
|
worksheet_set_column(m_worksheet, col, col, number, fmt);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CWorksheet::write_formula(ULONG row, USHORT col, BSTR string, ULONG format)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
lxw_format *fmt = NULL;
|
|
switch (format)
|
|
{
|
|
case 0:
|
|
fmt = NULL;
|
|
break;
|
|
case 1:
|
|
fmt = my_workbook->m_format_bold;
|
|
break;
|
|
}
|
|
|
|
// Let op: Die string moet echt UTF-8 encoded zijn!
|
|
COLE2T pszUTF8(string, CP_UTF8);
|
|
::worksheet_write_formula(m_worksheet, row, col, pszUTF8, fmt);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CWorksheet::insert_image(ULONG row, USHORT col, BSTR path, ULONG format)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
::worksheet_insert_image(m_worksheet, row, col, CString(path));
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CWorksheet::write_comment(ULONG row, USHORT col, BSTR string)
|
|
{
|
|
if (!m_worksheet)
|
|
return invalid();
|
|
|
|
// Let op: Die string moet echt UTF-8 encoded zijn!
|
|
COLE2T pszUTF8(string, CP_UTF8);
|
|
::worksheet_write_comment(m_worksheet, row, col, pszUTF8);
|
|
|
|
return S_OK;
|
|
}
|