Exemplo n.º 1
0
        private List <ExcelReferenceTable> GetReferenceTables(Excel.Sheets xlWorkSheets)
        {
            List <ExcelReferenceTable> Result = new List <ExcelReferenceTable>();
            string Temp = "";

            Excel.Worksheet   xlWorkSheet   = null;
            Excel.ListObjects xlListObjects = null;
            Excel.ListObject  ThisItem      = null;

            for (int x = 1; x <= xlWorkSheets.Count; x++)
            {
                ExcelReferenceTable Item = new ExcelReferenceTable();

                xlWorkSheet   = (Excel.Worksheet)xlWorkSheets[x];
                xlListObjects = xlWorkSheet.ListObjects;

                Int32 TotalCount = xlListObjects.Count - 1;
                for (int y = 0; y <= TotalCount; y++)
                {
                    ThisItem       = xlListObjects.Item[y + 1];
                    Item.Name      = ThisItem.Name;
                    Item.SheetName = xlWorkSheet.Name;

                    // TODO: Need to tinker with this.
                    try
                    {
                        Excel.QueryTable QT = ThisItem.QueryTable;
                        Item.SourceDataFile = QT.SourceDataFile;
                        ReleaseComObject(QT);
                    }
                    catch (Exception)
                    {
                        Item.SourceDataFile = "";
                    }

                    Excel.Range ThisRange = ThisItem.Range;
                    Temp = ThisRange.Address;

                    Item.Address = Temp.Replace("$", "");

                    Result.Add(Item);

                    Marshal.FinalReleaseComObject(ThisRange);
                    ThisRange = null;

                    Marshal.FinalReleaseComObject(ThisItem);
                    ThisItem = null;

                    Marshal.FinalReleaseComObject(xlListObjects);
                    xlListObjects = null;
                }
            }

            ReleaseComObject(xlWorkSheet);

            mReferenceTables = Result;

            return(Result);
        }
Exemplo n.º 2
0
Arquivo: XL.cs Projeto: PC-Pedia/T2XL
        private void Tablize()
        {
            mListObjects = mActiveSheet.ListObjects;

            mListObjects.Add(Excel.XlListObjectSourceType.xlSrcRange,
                             mActiveSheet.Range["A:D"],
                             Type.Missing,
                             Excel.XlYesNoGuess.xlYes,
                             Type.Missing);
            //.Name = "TestTable";
            //oSheet.ListObjects["TestTable"].TableStyle = "TableStyleMedium3";
        }
        public void ExportCSV(Excel.Application oAppXls, Excel.Workbooks oWBBs, Excel.Worksheet oWS, string strTableName, string strFileName)
        {
            RAIIFuncs rFuncs = new RAIIFuncs();

            using (RAIICont _raiiCont = new RAIICont())
            {
                Excel.Workbook _destWB = oWBBs.Add();
                _raiiCont.Push(rFuncs.GetFunc(_destWB));

                Excel.Sheets _oWSs = _destWB.Sheets;
                _raiiCont.Push(rFuncs.GetFunc(_oWSs));

                Excel.Worksheet _destWS = _oWSs[1];
                _raiiCont.Push(rFuncs.GetFunc(_destWS));

                Excel.Range _rngDest = _destWS.Range["A1"];
                _raiiCont.Push(rFuncs.GetFunc(_rngDest));

                Excel.ListObjects _LOs = oWS.ListObjects;
                _raiiCont.Push(rFuncs.GetFunc(_LOs));

                Excel.ListObject _srcLO = _LOs[strTableName];
                _raiiCont.Push(rFuncs.GetFunc(_srcLO));

                Excel.Range _srcRng = _srcLO.Range;
                _raiiCont.Push(rFuncs.GetFunc(_srcRng));

                _srcRng.Copy(_rngDest);

                oAppXls.DisplayAlerts = false;

                _destWB.SaveAs(
                    Filename: @"C:\Users\A.Roennburg\Documents\GH_ArbeitPlatz\Arbeits vom Sandra\MARKANT_CalculateSheet\CSV Daten\" + strFileName + ".csv"
                    , FileFormat: Excel.XlFileFormat.xlCSV
                    , CreateBackup: false
                    , Local: true
                    );
            }
            oAppXls.DisplayAlerts = true;
        }
Exemplo n.º 4
0
        /// <summary>
        /// Cria as fórmulas do workbook passado como parâmetro
        /// </summary>
        /// <param name="eBook"></param>
        /// <param name="xWorkbook"></param>
        private Excel.Workbook createFormulas(Excel.Workbook eBook, XWorkbook xWorkbook)
        {
            foreach (XWorksheet xWorksheet in xWorkbook.getWorksheets())
            {
                Excel.Worksheet eWorksheet = eBook.Sheets[xWorksheet.getName()];

                foreach (XDataTable xDataTable in xWorksheet.getDataTables())
                {
                    Excel.ListObjects eListObjects = eWorksheet.ListObjects;
                    Excel.ListObject  eListObject  = eListObjects[xDataTable.getName()];

                    foreach (XDataTableColumn sheetColumn in xDataTable.getDataTableColumns())
                    {
                        Excel.ListColumns eListColumns = eListObject.ListColumns;
                        Excel.ListColumn  eListColumn  = eListColumns[sheetColumn.getName()];

                        if (sheetColumn.getDataContent() is XTextExp)
                        {
                            Excel.Range rng     = eListColumn.DataBodyRange;
                            XTextExp    formula = (XTextExp)sheetColumn.getDataContent();
                            rng.Formula = string.Format("{0}", formula.getTextSymbol());

                            Marshal.ReleaseComObject(rng);
                        }

                        Marshal.ReleaseComObject(eListColumn);
                        Marshal.ReleaseComObject(eListColumns);
                    }

                    Marshal.ReleaseComObject(eListObject);
                    Marshal.ReleaseComObject(eListObjects);
                }

                Marshal.ReleaseComObject(eWorksheet);
            }

            return(eBook);
        }
        public void SetPrintAreaToTable(Excel.Worksheet oWS, string strTblName)
        {
            RAIIFuncs rFuncs = new RAIIFuncs();

            using (RAIICont _raiiCont = new RAIICont())
            {
                Excel.ListObjects oLOs = oWS.ListObjects;
                _raiiCont.Push(rFuncs.GetFunc(oLOs));

                Excel.ListObject oLO = oLOs[strTblName];
                _raiiCont.Push(rFuncs.GetFunc(oLO));

                Excel.Range rngLO = oLO.Range;
                _raiiCont.Push(rFuncs.GetFunc(rngLO));

                string prntArea = rngLO.Address;

                Excel.PageSetup pageSetup = oWS.PageSetup;
                //_raiiCont.Push(rFuncs.GetFunc(pageSetup));

                pageSetup.PrintArea = prntArea;
            }
        }
Exemplo n.º 6
0
        public void OnClick_Test(Office.IRibbonControl ctrl)
        {
            try
            {
                Excel.Worksheet _thisSheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;

                switch (ctrl.Id)
                {
                case "btn_Test_UnDo":
                    //Globals.ThisAddIn.Application.Undo();
                    Globals.ThisAddIn.Application.OnUndo("撤销这个", "ToUnDo");

                    break;

                case "btn_Test_QueryTable":


                    System.Data.SqlClient.SqlConnectionStringBuilder ssb = new System.Data.SqlClient.SqlConnectionStringBuilder();
                    ssb.UserID         = "oasa";
                    ssb.Password       = "******";
                    ssb.InitialCatalog = "oa";
                    ssb.DataSource     = "10.90.0.2";



                    string sqlString = "OLEDB;Provider=SQLOLEDB.1;Persist Security Info=True;User ID=oasa;Initial Catalog=OA;Data Source=10.90.0.2;Use Procedure for Prepare=1;Auto Translate=Tru";

                    Excel.ListObjects listObjects = _thisSheet.ListObjects;
                    Excel.ListObject  listObject  = listObjects.AddEx(Excel.XlListObjectSourceType.xlSrcExternal,
                                                                      sqlString,
                                                                      Type.Missing,
                                                                      Excel.XlYesNoGuess.xlYes,
                                                                      _thisSheet.Range["$A$2"],
                                                                      Type.Missing);
                    Excel.QueryTable queryTable = listObject.QueryTable;
                    queryTable.CommandType       = Excel.XlCmdType.xlCmdSql;
                    queryTable.CommandText       = _thisSheet.Range["A1"].Value;
                    queryTable.AdjustColumnWidth = true;
                    queryTable.Refresh();
                    break;

                case "btn_TextResize":
                    Excel.Range oldRng = _thisSheet.Range["A3:F3"];
                    ShowInfo("旧区域地址:" + oldRng.Address);
                    Excel.Range newRng = oldRng.Resize[oldRng.Rows.Count + 2, oldRng.Columns.Count];
                    ShowInfo("新区域地址:" + newRng.Address);

                    break;

                case "btn_InputCheck":

                    object f = _thisSheet.Application.InputBox("输入一个,测试bool");

                    ShowInfo(f.ToString() == "1" ? "有效" : "都是无效");

                    break;

                case "ZS_BTN_Test_ShowForm":
                    Test_ShowCoverForm();
                    break;

                case "ZS_BTN_Test_TestForm":
                    Controls.frmTest frm = new Controls.frmTest();
                    frm.Show();
                    break;

                case "ZS_TEST_GETDEPVERSION":
                    try
                    {
                        String ver = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
                        Globals.ThisAddIn.Application.ActiveCell.Value = ver;
                    }
                    catch (Exception ex)
                    {
                        Globals.ThisAddIn.Application.ActiveCell.Value = ex.Message;
                    }

                    break;

                case "ZS_TEST_GetCellValue":
                    Excel.Worksheet worksheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
                    foreach (Excel.Range r in worksheet.UsedRange.Rows)
                    {
                        foreach (Excel.Range r2 in r.Cells)
                        {
                            r2.ID = "TT" + new Random().Next(10000, 999999).ToString();
                            StringBuilder sb = new StringBuilder();
                            sb.AppendLine("Value:" + Convert.ToString(r2.Value));
                            sb.AppendLine("ID:" + Convert.ToString(r2.ID));
                            sb.AppendLine("AddressLocal:" + Convert.ToString(r2.AddressLocal));
                            sb.AppendLine("NumberFormat:" + Convert.ToString(r2.NumberFormat));
                            sb.AppendLine("NumberFormatLocal:" + Convert.ToString(r2.NumberFormatLocal));
                            WriteConsole(sb.ToString());
                        }
                    }
                    break;

                default:
                    System.Windows.Forms.MessageBox.Show("未指定的分支");
                    break;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Cria validações de dados nas colunas de referência a tabelas
        /// </summary>
        /// <param name="eBook">workbook correspondente do excel (COM)</param>
        /// <param name="xWorkbook">xworkbook</param>
        private Excel.Workbook createValidation(Excel.Workbook eBook, XWorkbook xWorkbook)
        {
            foreach (XWorksheet xWorksheet in xWorkbook.getWorksheets())
            {
                Excel.Worksheet eWorksheet = eBook.Sheets[xWorksheet.getName()];

                foreach (XDataTable xDataTable in xWorksheet.getDataTables())
                {
                    Excel.ListObjects eListObjects = eWorksheet.ListObjects;
                    Excel.ListObject  eListObject  = eListObjects[xDataTable.getName()];

                    foreach (XDataTableColumn sheetColumn in xDataTable.getDataTableColumns())
                    {
                        Excel.ListColumns eListColumns = eListObject.ListColumns;
                        Excel.ListColumn  eListColumn  = eListColumns[sheetColumn.getName()];

                        string xreference = sheetColumn.getXReference();
                        if (xreference != null)
                        {
                            var targettable = new XDataTable();
                            var targetsheet = GetXReference(xWorkbook, xreference, ref targettable);
                            if (targettable != null)
                            {
                                var index = targettable.getKeyIndex();
                                eWorksheet   = eBook.Sheets[targetsheet.getName()];
                                eListObjects = eWorksheet.ListObjects;
                                eListObject  = eListObjects[targettable.getName()];
                                eListColumns = eListObject.ListColumns;
                                eListColumn  = eListColumns[index];

                                string rangename = targettable.getName() + index.ToString(CultureInfo.InvariantCulture);
                                eBook.Names.Add(rangename, eListColumn.DataBodyRange);

                                Excel.Name targetName = eBook.Names.Item(rangename, Type.Missing, Type.Missing);
                                string     nameLocal  = "=" + targetName.NameLocal;

                                eWorksheet   = eBook.Sheets[xWorksheet.getName()];
                                eListObjects = eWorksheet.ListObjects;
                                eListObject  = eListObjects[xDataTable.getName()];
                                eListColumns = eListObject.ListColumns;
                                eListColumn  = eListColumns[sheetColumn.getName()];
                                eListColumn.DataBodyRange.Validation.Add(Excel.XlDVType.xlValidateList,
                                                                         Excel.XlDVAlertStyle.xlValidAlertStop, Missing.Value,
                                                                         nameLocal, Missing.Value);
                            }

                            Marshal.ReleaseComObject(eListColumn);
                        }

                        Marshal.ReleaseComObject(eListColumn);
                        Marshal.ReleaseComObject(eListColumns);
                    }

                    Marshal.ReleaseComObject(eListObject);
                    Marshal.ReleaseComObject(eListObjects);
                }

                Marshal.ReleaseComObject(eWorksheet);
            }

            return(eBook);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Cria a workbook e todos os seus objetos no formato do Excel (COM)
        /// </summary>
        /// <param name="eApp"></param>
        /// <param name="xWorkbook"></param>
        private Excel.Workbook createWorkbook(Excel.Application eApp, XWorkbook xWorkbook)
        {
            Excel.Workbook eBook = eApp.Workbooks.Add();
            eBook.Title = xWorkbook.getName();
            PrepareWorkbook(eBook);

            int numWorksheets = 1;

            foreach (XWorksheet xWorksheet in xWorkbook.getWorksheets())
            {
                Excel.Worksheet eWorksheet = numWorksheets == 1
                    ? (Excel.Worksheet)eBook.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value)
                : (Excel.Worksheet)eBook.Worksheets.Add(Missing.Value, eBook.Worksheets[numWorksheets - 1], Missing.Value, Missing.Value);

                eWorksheet.Name = xWorksheet.getName();

                int i = 1;
                foreach (XDataTable xDataTable in xWorksheet.getDataTables())
                {
                    Excel.Range title = eWorksheet.Cells[i, 1];
                    title.Value = xDataTable.getName();
                    Excel.Font titleFont = title.Font;
                    titleFont.Bold  = true;
                    titleFont.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
                    Marshal.ReleaseComObject(titleFont);
                    Marshal.ReleaseComObject(title);

                    Excel.ListObjects eListObjects = eWorksheet.ListObjects;
                    Excel.Range       bBegin       = (Excel.Range)eWorksheet.Cells[++i, 1];
                    Excel.ListObject  eListObject  = eListObjects.Add(Excel.XlListObjectSourceType.xlSrcRange, bBegin, Missing.Value, Excel.XlYesNoGuess.xlNo, Missing.Value);
                    eListObject.Name       = xDataTable.getName() ?? "";
                    eListObject.ShowTotals = false;

                    eListObject.ListRows.Add();
                    eListObject.ListRows.Add();

                    int columns = 1;
                    foreach (XDataTableColumn sheetColumn in xDataTable.getDataTableColumns())
                    {
                        Excel.ListColumns eListColumns = eListObject.ListColumns;
                        Excel.ListColumn  eListColumn  = columns == 1 ? eListColumns[1] : eListColumns.Add();
                        eListColumn.Name = sheetColumn.getName();
                        eListColumn.TotalsCalculation = Excel.XlTotalsCalculation.xlTotalsCalculationSum;
                        eListColumn.Range.EntireColumn.ColumnWidth = 14;

                        if (xDataTable.getDataTableColumns().Count == 1 &&
                            xDataTable.getDataTableColumns()[0].getDataContent() != null)
                        {
                            var datacontent = xDataTable.getDataTableColumns()[0].getDataContent();
                            if (datacontent is XDataArray)
                            {
                                var datacontentimpl = (XDataArray)datacontent;
                                var arraysymbol     = datacontentimpl.getArray();
                                int numSymbols      = 0;
                                foreach (var symbol in arraysymbol)
                                {
                                    if (eListColumn.DataBodyRange.Count < numSymbols)
                                    {
                                        eListObject.ListRows.Add();
                                    }

                                    eListColumn.DataBodyRange[numSymbols + 1] = symbol;
                                    numSymbols++;
                                }
                            }
                        }

                        columns++;

                        Marshal.ReleaseComObject(eListColumn);
                        Marshal.ReleaseComObject(eListColumns);
                    }

                    Marshal.ReleaseComObject(eListObject);
                    Marshal.ReleaseComObject(bBegin);
                    Marshal.ReleaseComObject(eListObjects);
                }

                numWorksheets++;
                Marshal.ReleaseComObject(eWorksheet);
            }

            return(eBook);
        }