В следующем, я пытаюсь сохранить набор объектов на листе excel. Каждый раз, когда функция вызывается для хранения значения, она должна выделить следующую ячейку столбца A
для хранения этого объекта.ОШИБКА! (Использование названных диапазонов Excel от C#)
Однако исключение выбрано библиотекой Interop при первом вызове get_Range()
. (сразу после блока catch)
Кто-нибудь знает, что я делаю неправильно?
private void AddName(string name, object value)
{
Excel.Worksheet jresheet;
try
{
jresheet = (Excel.Worksheet)_app.ActiveWorkbook.Sheets["jreTemplates"];
}
catch
{
jresheet = (Excel.Worksheet)_app.ActiveWorkbook.Sheets.Add(Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
jresheet.Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetVeryHidden;
jresheet.Name = "jreTemplates";
jresheet.Names.Add("next", "A1", true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
Excel.Range cell = jresheet.get_Range("next", Type.Missing);
cell.Value2 = value;
string address = ((Excel.Name)cell.Name).Name;
_app.ActiveWorkbook.Names.Add(name, address, false,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
cell = cell.get_Offset(1, 0);
jresheet.Names.Add("next", ((Excel.Name)cell.Name).Name, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
Поскольку исключение выбрано из библиотеки COM, встроенная информация представляется не очень полезной. Однако здесь:
"Exception from HRESULT: 0x800A03EC"
«\ г \ Nserver трассировки стека: \ г \ п \ г \ п \ г \ nException на вызваны повторно [0]: \ г \ п на system.runtime.remoting. Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) \ r \ n в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32) \ r \ n в Microsoft.Office.Interop.Excel._Worksheet .get_Range (Object Cell1, Object Cell2) \ r \ n в WorkbookTemplateManager.EditTemplateForm.AddName (имя строки, значение объекта) в C: \ Documents and Settings \ QueBITuser \ Мои документы \ Visual Studio 2008 \ Projects \ JRE.WCF \ WorkbookTemplateManager \ EditTemplateForm.cs: строка 143 \ r \ n в WorkbookTemplateManager.EditTemplateForm.SaveTemplate (объектный отправитель, аргументы EventArgs) в C: \ Documents and Settings \ QueBITuser \ My Documents \ Visual Studio 2008 \ Projects \ JRE.WCF \ WorkbookTemplateManager \ EditTemplateForm.cs: строка 124 \ r \ n в System.Windows.Forms.Control.OnClick (EventArgs e) \ r \ n в System.Windows.Forms.Button.OnClick (EventArgs e) \ r \ n в System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent) \ r \ n в System.Windows.Forms.Control.WmMouseUp (сообщение & m, кнопка MouseButtons, клики Int32) \ r \ n в System.Windows.Forms.Control.WndProc (Message & m) \ r \ n в System.Windows.Forms.ButtonBase.WndProc (Message & m) \ r \ n в System.Windows.Forms.Button.WndProc (Message & m) \ r \ n в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m) \ r \ n в System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) \ r \ n at System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) "
Можете ли вы опубликовать исключение и трассировки стека? –
Хорошо. Он опубликован сейчас. – mcoolbeth
Просто дикая догадка: вы попробовали jresheet.Names.Add («next», «= jreTemplates! $ A $ 1», ...? –