@amjad.sahi @Professionalize.Discourse
Sorry I have attached my old code,
this is my new code
const addValueToCell = (
worksheet: any,
row: number,
col: number,
value: any,
options: {
isBold?: boolean;
isCurrency?: boolean;
fontSize?: number;
underline?: 'single' | 'double' | '';
border?: boolean;
isGrandorInvoiceTotal?: boolean;
isDate?: boolean;
} = {}
) => {
const logTag = '[addValueToCell]';
try {
const cell = worksheet.getCells().get(row, col);
if (value === null || value === undefined || value === '') {
cell.putValue(''); // Set empty string for null/undefined/empty values
return;
} else {
cell.putValue(value);
}
const style = cell.getStyle();
if (options.isDate) {
try {
const dateValue = new Date(value);
if (!isNaN(dateValue.getTime())) {
const month = String(dateValue.getMonth() + 1).padStart(2, '0');
const day = String(dateValue.getDate()).padStart(2, '0');
const year = dateValue.getFullYear();
const dateString = `${month}/${day}/${year}`;
cell.putValue(dateString);
try {
style.setNumber(14);
cell.setStyle(style);
console.log(logTag, 'Date format set successfully');
} catch (e: any) {
console.error('Approach 1 failed for date formatting: ', e);
console.log('Using the alternative approach to set the custom format');
try {
style.setCustom('mm/dd/yyyy');
cell.setStyle(style);
} catch (innerErr) {
console.log(logTag, 'Date format fallback failed', innerErr);
}
}
} else {
console.log(logTag, 'Invalid date value:', value);
cell.putValue('');
}
} catch (err) {
console.log(logTag, 'Error parsing date value:', err);
cell.putValue('');
}
}
if (options.isBold) {
try {
// Try the original method first
style.getFont().setIsBold(true);
} catch (err) {
try {
// Alternative 1
style.getFont().setBold(true);
} catch (innerErr) {
try {
// Alternative 2
console.log(logTag, 'setBold not available, trying alternative 2');
style.getFont().setFontStyle(aspose.cells.FontStyle.Bold);
} catch (innerErr) {
console.log(logTag, 'setFontStyle not available');
}
}
}
}
if (options.fontSize) {
try {
// Try the original method first
style.getFont().setSize(options.fontSize);
} catch (err) {
try {
// Alternative 1
console.log(logTag, 'setSize not available, trying alternative 1');
style.getFont().setFontSize(options.fontSize);
} catch (innerErr) {
console.log(logTag, 'setFontSize not available');
}
}
}
if (options.isCurrency) {
const roundedValue = Number(parseFloat(value).toFixed(2));
cell.putValue(Math.abs(roundedValue)); // Use absolute value for display
try {
if (roundedValue < 0) {
style.setCustom('$#,##0.00_);($#,##0.00)');
} else {
style.setCustom('$#,##0.00');
}
} catch (err) {
try {
console.log(logTag, 'setCustom not available, trying alternative 1');
if (roundedValue < 0) {
style.setNumber(CURRENCY_STYLE_WITH_PARENTHESES); // Assuming 41 is the index for currency format with parentheses
} else {
style.setNumber(CURRENCY_STYLE_INDEX); // Assuming 8 is the index for standard currency format
}
} catch (innerErr) {
console.log(logTag, 'setNumber not available');
}
}
if (roundedValue < 0) {
cell.putValue(-Math.abs(roundedValue));
}
}
if (options.underline) {
try {
style.getFont().setUnderline(options.underline === 'single' ? 1 : 2);
} catch (err) {
try {
console.log(
logTag,
'setUnderline not available, trying alternative 1'
);
const underlineType =
options.underline === 'single'
? aspose.cells.FontUnderlineType.Single
: aspose.cells.FontUnderlineType.Double;
style.getFont().setUnderlineType(underlineType);
} catch (innerErr) {
console.log(logTag, 'setUnderlineType not available');
}
}
}
if (options.border) {
try {
const borders = style.getBorders();
// Set top border
borders
.getByBorderType(aspose.cells.BorderType.TOP_BORDER)
.setLineStyle(aspose.cells.CellBorderType.THIN);
borders
.getByBorderType(aspose.cells.BorderType.TOP_BORDER)
.setColor(aspose.cells.Color.getBlack());
// Set bottom border
if (options.isGrandorInvoiceTotal) {
console.log(options, 'options', 'Bottom Border');
borders
.getByBorderType(aspose.cells.BorderType.BOTTOM_BORDER)
.setLineStyle(aspose.cells.CellBorderType.DOUBLE);
borders
.getByBorderType(aspose.cells.BorderType.BOTTOM_BORDER)
.setColor(aspose.cells.Color.getBlack());
} else {
borders
.getByBorderType(aspose.cells.BorderType.BOTTOM_BORDER)
.setLineStyle(aspose.cells.CellBorderType.THIN);
borders
.getByBorderType(aspose.cells.BorderType.BOTTOM_BORDER)
.setColor(aspose.cells.Color.getBlack());
}
if (!options.isGrandorInvoiceTotal) {
// Set left border
borders
.getByBorderType(aspose.cells.BorderType.LEFT_BORDER)
.setLineStyle(aspose.cells.CellBorderType.THIN);
borders
.getByBorderType(aspose.cells.BorderType.LEFT_BORDER)
.setColor(aspose.cells.Color.getBlack());
// Set right border
borders
.getByBorderType(aspose.cells.BorderType.RIGHT_BORDER)
.setLineStyle(aspose.cells.CellBorderType.THIN);
borders
.getByBorderType(aspose.cells.BorderType.RIGHT_BORDER)
.setColor(aspose.cells.Color.getBlack());
}
console.log(logTag, 'Borders set successfully');
} catch (err) {
console.error(logTag, 'Error setting borders:', err);
try {
const borders = style.getBorders();
borders.setStyle(
aspose.cells.BorderType.TOP_BORDER,
aspose.cells.CellBorderType.THIN
);
borders.setStyle(
aspose.cells.BorderType.BOTTOM_BORDER,
aspose.cells.CellBorderType.THIN
);
borders.setStyle(
aspose.cells.BorderType.LEFT_BORDER,
aspose.cells.CellBorderType.THIN
);
borders.setStyle(
aspose.cells.BorderType.RIGHT_BORDER,
aspose.cells.CellBorderType.THIN
);
borders.setColor(aspose.cells.Color.getBlack());
console.log(
logTag,
'Individual borders set successfully using alternative method'
);
} catch (err2) {
console.error(
logTag,
'Error setting individual borders using alternative method:',
err2
);
}
}
}
cell.setStyle(style);
} catch (error: any) {
throw {
message: 'An while placing the values in the cells : ' + error.message,
occurredAt: 'addValueToCell',
};
}
};
the issue I faced with old code was sometimes, date values were just empty in excel not sure why and didn’t get any errors either
another doubt is when passing the values to putValue() should we pass the date values as date or convert it to string and pass it? or both works in above approach?