Example #1
0
/// <summary>
/// Setup Filters
/// </summary>
/// <param name="fd"></param>
/// <param name="defaultExt"></param>
/// <param name="fltrs"></param>
/// <returns>Index of initial filter</returns>

        static int SetupFilters(
            string filter,
            string defaultExt,
            Microsoft.Office.Core.FileDialog fd)
        {
            FileDialogFilters fltrs = null;

            if (fd != null)             // only setup if fd is defined
            {
                fltrs = fd.Filters;
                fltrs.Clear();
            }

            string[] sa  = filter.Split(',');
            int      sfi = 0;

            for (int fi = 0; fi < sa.Length; fi += 2)
            {
                string desc = sa[fi];
                string ext  = sa[fi + 1];
                if (fltrs != null)
                {
                    fltrs.Add(desc, ext);
                }

                if (Lex.Contains(ext, defaultExt))                 // selected filter
                {
                    sfi = fi / 2 + 1;
                }
            }

            if (sfi == 0 && sa.Length > 0)
            {
                sfi = 1;
            }
            if (fltrs != null)
            {
                fd.FilterIndex = sfi;                            // set the filter index
            }
            return(sfi);
        }
Example #2
0
        private void SaveWorkSheet(Workbook wb, bool saveasui, ref bool cancel, bool reOpen)
        {
            // 不需要保存处理的话,直接返回
            if (!SettingsCsv.Default.EnableSaveEncode)
            {
                return;
            }

            string fileName = wb.FullName;

            if (!fileName.ToLower().EndsWith(".csv"))
            {
                return;
            }

            if (!fileDict.ContainsKey(fileName))
            {
                Encoding encoding = GetFileEncoding(fileName);
                fileDict[fileName] = encoding;
            }

            Encoding fileEncoding = fileDict[fileName];

            if (Equals(fileEncoding, Encoding.UTF8) || Equals(fileEncoding, Encoding.Unicode) || Equals(fileEncoding, Encoding.BigEndianUnicode))
            {
                // 自己来操作
                cancel = true;

                // 如果是另存为,那么需要获取另存为的文件名,所以要自己显示另存为保存框
                if (saveasui)
                {
                    FileDialog fileDialog = app.FileDialog[MsoFileDialogType.msoFileDialogSaveAs];
                    fileDialog.InitialFileName  = wb.Name;
                    fileDialog.AllowMultiSelect = false;
                    fileDialog.Title            = "另存为";
                    FileDialogFilters fileDialogFilters = fileDialog.Filters;
                    bool flag = false;
                    for (int i = 1; i <= fileDialogFilters.Count; i++)
                    {
                        if ("*.csv".Equals(fileDialogFilters.Item(i).Extensions))
                        {
                            flag = true;
                            fileDialog.FilterIndex = i;
                            break;
                        }
                    }
                    if (!flag)
                    {
                        fileDialogFilters.Add("CSV (逗号分隔)", "*.csv");
                        fileDialog.FilterIndex = fileDialogFilters.Count;
                    }

                    // 取消了操作
                    if (fileDialog.Show() == 0)
                    {
                        return;
                    }

                    string fileNewName = fileDialog.SelectedItems.Item(1);
                    if (!fileNewName.ToLower().EndsWith(".csv"))
                    {
                        // 非csv则普通保存,需要标志一下,否则会再进来,因为文件名是同一个
                        flagSaveAs = true;
                        wb.SaveAs(fileNewName);
                        return;
                    }

                    fileDict[fileNewName] = fileEncoding;
                    fileName = fileNewName;
                }
                app.ScreenUpdating = false;

                // 取值
                StringBuilder sb    = new StringBuilder();
                Worksheet     sheet = wb.ActiveSheet;
                Range         range = sheet.UsedRange;
                int           row   = range.Rows.Count;
                int           col   = range.Columns.Count;

                object[,] tmp = sheet.UsedRange.Value;
                for (int i = 1; i <= row; i++)
                {
                    for (int j = 1; j <= col; j++)
                    {
                        if (j != 1)
                        {
                            sb.Append(',');
                        }

                        var obj = tmp[i, j];
                        if (obj == null)
                        {
                            continue;
                        }

                        var val = obj.ToString();
                        if (!string.IsNullOrEmpty(val))
                        {
                            sb.Append(ConvertToCsvCellString(val));
                        }
                    }

                    if (i != row)
                    {
                        sb.AppendLine(string.Empty);
                    }
                }

                var win = wb.Windows[1];
                range = win.ActiveCell;
                row   = range.Row;
                col   = range.Column;
                int scrollRow = win.ScrollRow;
                int scrollCol = win.ScrollColumn;

                // 如果异常,就不用再打开单元簿
                bool canClose = reOpen;
                try
                {
                    wb.Saved = true;
                    wb.Close(false);
                }
                catch
                {
                    canClose = false;
                }

                // 保存带编码的csv
                using (StreamWriter sw = new StreamWriter(fileName, false, fileEncoding))
                {
                    sw.Write(sb.ToString());
                    sw.Close();
                    sw.Dispose();
                }

                if (canClose)
                {
                    wb = app.Workbooks.Open(fileName);
                    app.ScreenUpdating = false;
                    sheet = wb.ActiveSheet;
                    sheet.UsedRange.Columns.NumberFormat = "@";
                    sheet.UsedRange.Value = tmp;    // 设置成文本格式后,需要再赋值,否则会出现科学计数
                    sheet.Cells[row, col].Select();
                    wb.Windows[1].ScrollColumn = scrollCol;
                    wb.Windows[1].ScrollRow    = scrollRow;
                    wb.Saved = true;
                }
                app.ScreenUpdating = true;
            }
        }