Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Error 0x800A03EC when trying to populate a worksheet

When trying to set the range value of the spreadsheet I get the following
error: Exception from HRESULT: 0x800A03EC.

BuildXls method follows:
****************** start of BuildXls method *********************

public string BuildXls(string FileName, ref string[,] AryFieldsAll,
System.Data.DataTable MyDataTable)
{
System.Globalization.CultureInfo enUS = new
System.Globalization.CultureInfo("en-US");

System.Threading.Thread.CurrentThread.CurrentCultu re = enUS;

string return_message;
int num_rows=MyDataTable.Rows.Count;
int num_cols=MyDataTable.Columns.Count;
int max_rows_per_sheet=65000;
if (num_rows<=max_rows_per_sheet)
{
max_rows_per_sheet=num_rows;
}
int row_index;
int col_index;
int sheet_index=1;
int sheet_row_counter=0;
object[,] objData = new object[num_rows,num_cols];
object[,] objData2 = new object[max_rows_per_sheet,num_cols];
object[] objHeaders = new object[num_cols];

// Excel object references.
Excel.Application objExcel = null;
Excel.Workbooks objBooks = null;
Excel._Workbook objBook = null;
Excel.Sheets objSheets = null;
Excel._Worksheet objSheet = null;
Excel.Range objRange = null;
Excel.Font objFont = null;

// Start a new workbook in Excel.
objExcel = new Excel.Application();
objBooks = (Excel.Workbooks)objExcel.Workbooks;
objBook = (Excel._Workbook)(objBooks.Add(objOpt));
objSheets = (Excel.Sheets)objBook.Worksheets;
objSheet = (Excel._Worksheet)(objSheets.get_Item(sheet_index) );

//build a header array
col_index=0;
foreach(DataColumn col in MyDataTable.Columns)
{
objHeaders[col_index] = col.ColumnName;
col_index++;
}

//build an array of data rows
row_index=0;
foreach(DataRow row in MyDataTable.Rows)
{
col_index=0;
foreach(object item in row.ItemArray)
{
//create an array of row values. prefix all values with a single quote.
objData[row_index,col_index] = "'"+item.ToString();
col_index++;
}
row_index++;
}

//build the spreadsheet
try
{
for(row_index=0; row_index<num_rows; row_index++)
{
if (sheet_row_counter==0)
{
objData2 = new object[max_rows_per_sheet,num_cols];
}

//create an array of row values
for (col_index=0; col_index<num_cols; col_index++)
{
objData2[sheet_row_counter,col_index] = objData[row_index,col_index];
}
sheet_row_counter++;

if (sheet_row_counter==max_rows_per_sheet || row_index==num_rows-1)
{
if (sheet_index3)
{
objSheet =
(Excel._Worksheet)objBook.Worksheets.Add(Missing.V alue,objSheet,Missing.Value,Missing.Value);
objSheet.Name="Sheet"+(sheet_index);
}
else
{
objSheet =
((Excel._Worksheet)objExcel.Worksheets["Sheet"+sheet_index]);
}

//add the header to the worksheet
objRange =
objSheet.get_Range((Excel.Range)objSheet.Cells[1,1],(Excel.Range)objSheet.Cells[1,num_cols]);
objRange.set_Value(Missing.Value, objHeaders);
objFont = objRange.Font;
objFont.Bold=true;

//add the data rows to the worksheet
objRange =
objSheet.get_Range((Excel.Range)objSheet.Cells[2,1],(Excel.Range)objSheet.Cells[max_rows_per_sheet+1,num_cols]);
objRange.Value2 = objData2; //this is where the error occurs
//objRange.set_Value(Missing.Value, objData2)
//objRange.set_Value(OWC10.XlRangeValueType.xlRangeV alueDefault,objData2);

sheet_row_counter=0;
sheet_index++;
}
}

MyDataTable.Dispose();
GC.Collect();

//format the spreadsheet
for(int i=1;i<=objBook.Worksheets.Count;i++)
{
objSheet=(Excel._Worksheet)objBook.Worksheets["Sheet"+i];
int j=0;
foreach(DataColumn col in MyDataTable.Columns)
{
j++;
objRange=(Excel.Range)objSheet.Cells[1,j];
objRange=objRange.EntireColumn;
//objRange.AutoFit();
//objRange.set_HorizontalAlignment(Excel.XlHAlign.xl HAlignRight);
// set the font
objFont = objRange.Font;
objFont.Name = "Arial";
objFont.Size = 8;

// format the columns
for (int f=0; f<AryFieldsAll.GetLength(0); f++)
{
// does the selected column name equal the AryFieldsAll field name
value?
if (col.ColumnName.ToString() == AryFieldsAll[f,3])
{
switch (AryFieldsAll[f,17]) //format info
{
case "{0:N0}": // number
objRange.NumberFormat = "###,##0;[Red]###,##0";
break;
case "{0:c}": // currency
objRange.NumberFormat = "$###,##0.00;[Red]$###,##0.00";
break;
case "{0:p}": // percentage
objRange.NumberFormat = "###,##0.00%;[Red]###,##0.00%";
break;
case "{mm/dd/yyyy}": // date
objRange.NumberFormat = "mm/dd/yyyy";
break;
} //switch (AryFieldsAll[f,17]) //format info
break;
} //if (MyDataColumn.ColumnName.ToString() == AryFieldsAll[f,0])
} //for (int f=0; f<AryFieldsAll.GetLength(0); f++)
} //foreach(DataColumn col in MyDataTable.Columns)
} //for(int i=1;i<=objBook.Worksheets.Count;i++)

((Excel._Worksheet)objExcel.Worksheets["Sheet1"]).Activate();
// Save the Workbook
objBook.SaveAs(FileName, objOpt, objOpt, objOpt, objOpt, objOpt,
Excel.XlSaveAsAccessMode.xlNoChange, objOpt, objOpt, objOpt, objOpt, objOpt);

return_message = "success";
}
catch (Exception e)
{
return_message = e.Message.ToString();
}
finally
{/*
// Need all following code to clean up and extingush all references!!!
objBook.Close(null,null,null);
objExcel.Workbooks.Close();
objExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComO bject (objRange);
System.Runtime.InteropServices.Marshal.ReleaseComO bject (objExcel);
System.Runtime.InteropServices.Marshal.ReleaseComO bject (objSheet);
System.Runtime.InteropServices.Marshal.ReleaseComO bject (objBook);
objSheet=null;
objBook=null;
objExcel = null;
GC.Collect(); // force final cleanup!
*/
}

return return_message;
}

****************** end of BuildXls method *********************

when the Datatable contains this data, it works:

Placement #365 - 02/14/02 - Keyword Bundle: hotel reservation, hotel
reservations, car rental, car rentals Placement #366 - 02/14/02 -
Keyword Bundle: cruise line, cruise lines, cruise ship, cruise ships, luxury
cruise, luxury cruises, cruises Placement #367 - 02/14/02 -
Keyword Bundle: broadband, portal Placement #368 - 02/14/02 -
keyword Bundle: personal ads, online personals Placement #369 -
02/14/02 - Keyword Bundle: bed and breakfast; bed and breakfasts; bed and
breakfast inn; bed and breakfast inns; bed breakfast; bed breakfasts; bed
breakfast inn; bed breakfast inns; bed and breakfast guide; bed and breakfast
directory; bed breakfast directory; country inn; country inns; inns

when the DataTable contains this data, it fails:

This Order replaces BS03210110 Placement 514 Exclusive
Keywords;camcorder accessories; camcorder bags; camcorder lights; camcorder
microphones; camcorder stand; camcorder stands; camcorder tripods; camera
bags; conversion lens; sony accessories; sony accessorry; tripod stands;
video accessories; video cables; video editing; video lights; camcorder lens
Placement 524 audiovox accessories; audiovox chargers; audiovox
free; audiovox headsets; cell accessories; cellular accessories; cellular
accessory; digital accessories; ericsson accessories; ericsson chargers;
ericsson free; ericsson headsets; headset; headsets; motorola accessories;
motorola chargers; motorola free; motorola headsets; nextel accessories;
nextel chargers; nextel free; nextel headsets; nokia accessories; nokia
chargers; nokia free; nokia headsets Placement 523 9 volt; aa
batteries; aa battery; aaa batteries; battery; batteries; alkaline batteries;
alkaline battery; battery charger; battery chargers; ; camcorder batteries;
camcorder battery; cell phone batteries; cell phone battery; cellphone
batteries; cellphone battery; cellular batteries; cellular battery; cellular
batteries; cellular battery; computer batteries; computer battery; cordless
phone batteries; cordless battery; digital camera batteries; digit
Placement 513 Exclusive Keywords;audiovox accessories; audiovox chargers;
audiovox free; audiovox headsets; cell accessories; cellular accessories;
cellular accessory; digital accessories; ericsson accessories; ericsson
chargers; ericsson free; ericsson headsets; headset; headsets; motorola
accessories; motorola chargers; motorola free; motorola headsets; nextel
accessories; nextel chargers; nextel free; nextel headsets; nokia
accessories; nokia chargers; nokia fre Placement 525 camcorder
accessories; camcorder bags; camcorder lights; camcorder microphones;
camcorder stand; camcorder stands; camcorder tripods; camera bags; conversion
lens; sony accessories; sony accessorry; tripod stands; video accessories;
video cables; video editing; video lights; camcorder lens Placement
515 keyword; Battery Placement 516 All Placements in
Shopping Channel Placement 512 9 volt; aa batteries; aa battery;
aaa batteries; batteries; alkaline batteries; alkaline battery; battery
charger; battery chargers; ; camcorder batteries; camcorder battery; cell
phone batteries; cell phone battery; cellphone batteries; cellphone battery;
cellular batteries; cellular battery; cellular batteries; cellular battery;
computer batteries; computer battery; cordless phone batteries; cordless
battery; digital camera batteries; digital camera


Any ideas or thoughts would be appreciated.
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Error 0x800A03EC when trying to populate a worksheet

Here's what I know so far....

If the text exceeds 911 chars, it fails. 911 chars and below, it works.
Any ideas?
  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Error 0x800A03EC when trying to populate a worksheet

I've been searching the www for an answer and the only solution I can find is
to truncate the string to 911 characters. I would prefer to not take this
approach if I don't have to. I have to believe there is a way to
programmatically add more than 911 characters because I'm able to manually
copy 32k characters into an excel spreadsheet cell. Has anyone else overcome
this problem?
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3
Default Error 0x800A03EC when trying to populate a worksheet

I've run into the same problem, and also discovered the 911-character limit.
Since it's in an existing application, and we've been running it with the
same data that cause the problem (a string of about 1871 characters), it's
likely that some fairly recent Office update has caused it.

Note that it doesn't happen in VBA; I can start Excel and put a 2K-character
string into a cell with no complaints. It's when I'm working at a lower
lever using a SAFEARRAY of VARIANTs that I get the problem.

Don


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Populate Order worksheet from Quote worksheet Veronica Johnson Excel Worksheet Functions 10 January 23rd 08 09:12 PM
populate cell on worksheet 2 if text is red on worksheet 1 SCrowley Excel Worksheet Functions 14 May 15th 07 09:28 PM
Error 0x800A03EC trying to set range value mdengler New Users to Excel 2 March 1st 06 01:22 PM
SaveAs causes 0x800A03EC error Justin Young Excel Programming 0 May 25th 05 06:29 PM
Chart.Export throws COMException (0x800A03EC): Exception from HRESULT: 0x800A03EC. Steven Excel Programming 1 November 5th 03 06:59 PM


All times are GMT +1. The time now is 09:08 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"