예제 #1
0
 public void Can_Add_WorkSheet()
 {
     using (ExcelOutputWriter writer = new ExcelOutputWriter("Test.xls", DefaultExcelOption))
     {
         writer.AddSheet("Test Sheet");
     }
 }
예제 #2
0
        public void Can_Add_Data_To_WorkSheet()
        {
            using (ExcelOutputWriter writer = new ExcelOutputWriter("Test.xls", DefaultExcelOption))
            {
                writer.SetCurrentSheet(mySearchHeader);
                writer.PrintRow("none", null, "field1", "field2", "field3", "field4");
                writer.PrintRow("none", () => null, "field1", "field2", "field3", "field4");
                writer.PrintRow("none", () => new List <string>(), "field1", "field2", "field3", "field4");
                writer.PrintRow("none", null, "field1", "field2", "field3", "field4");

                while (writer.myLinesWritten != 4)
                {
                    Thread.Sleep(50);
                }

                Assert.AreEqual("Type", writer.GetCell(writer.myCurrentSheet, "A4").Value2.ToString(), "Expected addtional content 1");
                Assert.AreEqual("Field", writer.GetCell(writer.myCurrentSheet, "B4").Value2.ToString(), "Expected addtional content 2");

                Assert.AreEqual("field1", writer.GetCell(writer.myCurrentSheet, "A5").Value2.ToString(), "Expected addtional content 1");
                Assert.AreEqual("field1", writer.GetCell(writer.myCurrentSheet, "A8").Value2.ToString(), "Expected addtional content 2");

                Assert.AreEqual("field4", writer.GetCell(writer.myCurrentSheet, "D5").Value2.ToString(), "Expected addtional content 1");
                Assert.AreEqual("field4", writer.GetCell(writer.myCurrentSheet, "D8").Value2.ToString(), "Expected addtional content 2");
            }
        }
예제 #3
0
 public void Can_Add_WorkSheet_And_Columns()
 {
     using (ExcelOutputWriter writer = new ExcelOutputWriter("Test.xls", DefaultExcelOption))
     {
         writer.SetCurrentSheet(mySearchHeader);
         Assert.AreEqual("Type", writer.GetCell(writer.myCurrentSheet, "A4").Value2.ToString(), "Expected addtional content 1");
         Assert.AreEqual("Field", writer.GetCell(writer.myCurrentSheet, "B4").Value2.ToString(), "Expected addtional content 2");
     }
 }
예제 #4
0
        public void Can_Write_ToSheet_From_Many_Threads()
        {
            Worksheet        currentSheet = null;
            ApplicationClass excel        = null;

            using (ExcelOutputWriter writer = new ExcelOutputWriter(null, ExcelOptions.None))
            {
                string ExtCol1 = "ext1";
                string ExtCol2 = "ext2";

                writer.SetCurrentSheet(mySearchHeader);
                currentSheet = writer.myCurrentSheet;

                excel = writer.myExcel;

                int LinesToWrite = 30;

                System.Action acc = () =>
                {
                    while (true)
                    {
                        if (LinesToWrite <= 0)
                        {
                            break;
                        }

                        writer.PrintRow("none", () => new List <string> {
                            ExtCol1, ExtCol2
                        },
                                        Thread.CurrentThread.ManagedThreadId.ToString(), LinesToWrite.ToString(), "field3", "field4");

                        Interlocked.Decrement(ref LinesToWrite);
                    }
                };

                for (int i = 0; i < 5; i++)
                {
                    acc.BeginInvoke(null, null);
                }
                while (LinesToWrite > 0)
                {
                    Thread.Sleep(50);
                }
                Console.WriteLine("Did enqeue all items");
            }

            Assert.IsNotNull(currentSheet.get_Range("B34", Type.Missing).Value2);
            excel.Quit();
        }
예제 #5
0
        public void Can_Add_Additional_Columns()
        {
            using (ExcelOutputWriter writer = new ExcelOutputWriter("Test.xls", DefaultExcelOption))
            {
                string ExtCol1 = "ext1";
                string ExtCol2 = "ext2";

                writer.SetCurrentSheet(mySearchHeader);
                writer.PrintRow("none", () => new List <string> {
                    ExtCol1, ExtCol2
                }, "field1", "field2", "field3", "field4");
                while (writer.myLinesWritten == 0)
                {
                    Thread.Sleep(50);
                }

                Assert.AreEqual(ExtCol1, writer.GetCell(writer.myCurrentSheet, "E5").Value2.ToString(), "Expected addtional content 1");
                Assert.AreEqual(ExtCol2, writer.GetCell(writer.myCurrentSheet, "F5").Value2.ToString(), "Expected addtional content 2");
            }
        }
예제 #6
0
        public void Can_Execute_Excel_From_Non_US_Thread()
        {
            CultureInfo old = Thread.CurrentThread.CurrentCulture;

            try
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;


                SheetInfo noSourceFilecol = new SheetInfo
                {
                    Columns = new List <ColumnInfo>
                    {
                        new ColumnInfo {
                            Name = "Type", Width = 80
                        },
                        new ColumnInfo {
                            Name = "Assembly", Width = 60
                        },
                    },

                    SheetName = "Test Sheet"
                };


                using (ExcelOutputWriter writer = new ExcelOutputWriter(null, DefaultExcelOption))
                {
                    writer.SetCurrentSheet(noSourceFilecol);
                    writer.PrintRow("{0} {1}", null, "Col1", "Col2");
                }
            }
            finally
            {
                Thread.CurrentThread.CurrentCulture = old;
            }
        }
예제 #7
0
        public void Can_WriteSheets_With_No_SourceFile_Column()
        {
            SheetInfo noSourceFilecol = new SheetInfo
            {
                Columns = new List <ColumnInfo>
                {
                    new ColumnInfo {
                        Name = "Type", Width = 80
                    },
                    new ColumnInfo {
                        Name = "Assembly", Width = 60
                    },
                },

                SheetName = "Test Sheet"
            };


            using (ExcelOutputWriter writer = new ExcelOutputWriter(null, DefaultExcelOption))
            {
                writer.SetCurrentSheet(noSourceFilecol);
                writer.PrintRow("{0} {1}", null, "Col1", "Col2");
            }
        }
예제 #8
0
        public Task <HttpResponseMessage> ExportDocumentsLeftToReplicate([FromBody] StudioTasksController.ExportData optionsJson)
        {
            var result = GetEmptyMessage();
            var taskId = optionsJson.ProgressTaskId;
            var status = new OperationStatus();

            var tcs = new TaskCompletionSource <object>();

            try
            {
                var sp = Stopwatch.StartNew();

                Database.Tasks.AddTask(tcs.Task, status, new TaskActions.PendingTaskDescription
                {
                    StartTime   = SystemTime.UtcNow,
                    TaskType    = TaskActions.PendingTaskType.ExportDocumentsLeftToReplicate,
                    Description = "Monitoring progress of export of docs left to replicate"
                }, taskId, null, skipStatusCheck: true);

                var        requestString = optionsJson.DownloadOptions;
                ServerInfo serverInfo;

                using (var jsonReader = new RavenJsonTextReader(new StringReader(requestString)))
                {
                    var serializer = JsonExtensions.CreateDefaultJsonSerializer();
                    serverInfo = (ServerInfo)serializer.Deserialize(jsonReader, typeof(ServerInfo));
                }

                var documentsToReplicateCalculator = new DocumentsLeftToReplicate(Database);

                if (serverInfo.SourceId != documentsToReplicateCalculator.DatabaseId)
                {
                    throw new InvalidOperationException("Cannot export documents to replicate from a server other than this one!");
                }

                // create PushStreamContent object that will be called when the output stream will be ready.
                result.Content = new PushStreamContent((outputStream, content, arg3) =>
                {
                    using (var writer = new ExcelOutputWriter(outputStream))
                    {
                        try
                        {
                            writer.WriteHeader();
                            writer.Write("document-ids-left-to-replicate");

                            long count             = 0;
                            long skipped           = 0;
                            Action <string> action = (documentId) =>
                            {
                                writer.Write(documentId);

                                if (++count % 1000 != 0)
                                {
                                    return;
                                }

                                status.MarkProgress($"Exported {count:#,#} documents");
                                outputStream.Flush();
                            };

                            Action skippedAction = () =>
                            {
                                if (++skipped % 100 != 0)
                                {
                                    return;
                                }

                                status.MarkProgress($"Skipped {skipped:#,#} documents");
                                outputStream.Flush();
                            };

                            documentsToReplicateCalculator.ExtractDocumentIds(serverInfo, action, skippedAction);

                            var message = $"Completed export of {count:#,#} document ids";
                            status.MarkCompleted(message, sp.Elapsed);
                        }
                        catch (Exception e)
                        {
                            status.ExceptionDetails = e.ToString();
                            status.MarkFaulted(e.ToString());
                            writer.WriteError(e);
                            throw;
                        }
                        finally
                        {
                            tcs.SetResult("Completed");
                            outputStream.Close();
                        }
                    }
                });

                var fileName = $"Documents to replicate from '{serverInfo.SourceUrl}' to '{serverInfo.DestinationUrl}', " +
                               $"{DateTime.Now.ToString("yyyy-MM-dd HH-mm", CultureInfo.InvariantCulture)}";

                foreach (char c in Path.GetInvalidFileNameChars())
                {
                    fileName = fileName.Replace(c, '_');
                }

                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = fileName + ".csv"
                };
            }
            catch (Exception e)
            {
                status.ExceptionDetails = e.ToString();
                status.MarkFaulted(e.ToString());
                tcs.SetResult("Completed");
                throw;
            }

            return(new CompletedTask <HttpResponseMessage>(result));
        }
        private static void WriteOutput(string excelLocationString, ScoringOutput scores, Application app)
        {
            ExcelOutputWriter writer = new ExcelOutputWriter(excelLocationString, app);

            writer.Write(scores);
        }