Monday, August 18, 2014

Export crystal report to Excel - some tips.

Developing a crystal report which will be exported into Excel is always tricky, time consuming and needs a lot of patience. There are a lot of blog posts, forum discussions, articles in the web about this matter. During last couple of days I was hanging with one of my report and at last I've figured out some tricks about exporting crystal report to excel. Here is some - 

1. Do not use your mouse to resize/align your header/detail fields. Always depend on Properties pane. make sure the height. width and left properties are always same of related header and detail fields.

2. Top property of header/detail fields should be always 0.

2. Do not use line object. It will create an extra excel row after export.

3. You can use (single) right and bottom border of detail field objects. and only right border of header objects. 

4. May be the report which will export to excel will not be presentable for clients. So create another presentable report for client which may have lines or brders or colors whatever you want.

5. After export into excel - may be your header or detail section will be created using more than one excel rows. This may not be a problem. But you can decrease the height of detail/header fields to accommodate in single excel row. 

6. Suppress (Drill Down) the report header, report footer, page header, page footer. Because they are value less in Excel.

7. In your data source do not keep null data in any field. At-least fill data with empty string/something not valuable like dash (-).

May be these tricks will help you. 

Happy coding!

(also published in

Monday, August 4, 2014

Getting worksheet from workbook when there is no such worksheet exists.

During application-level excel add-in development sometimes we need to check whether the worksheet is null or not. Consider the following lines -

string myWorkSheetName = "a_worksheet_Name";
Excel.Workbook Wb= Globals.ThisAddIn.Application.ActiveWorkbook;
Excel.Worksheet mySheet = Wb.Worksheets.get_Item(myWorkSheetName) as Excel.Worksheet;


Excel.Worksheet mySheet = Wb.Worksheets[myWorkSheetName] as Excel.Worksheet;

The worksheets indexer ([]) 
or the get_Item method of Worksheets class does not return nullable object. In this case we can take advantage of LINQ -

 Excel.Worksheet mySheet = Wb.Worksheets.Cast().Where(w => w.Name == myWorkSheetName).FirstOrDefault();

If the worksheet does not found then mySheet will contain null.