Files
Slnkxlsx/SLNKXLSX/SLNKWorksheet.cpp
Jos Groot Lipman 4ef4597279 VGLD#84825 SLNKXLSX 1.02 betere datums voor 1970
svn path=/Slnkxlsx/trunk/; revision=66421
2024-10-02 13:28:49 +00:00

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;
}