我如何精确地从iOS写出一个CSV文件在Swift写?

我正试图导出一个CVS文件。

用下面的代码我设法得到文件

let fileName = "sample.csv"//"sample.txt" @IBAction func createFile(sender: AnyObject) { let path = tmpDir.stringByAppendingPathComponent(fileName) let contentsOfFile = "No,President Name,Wikipedia URL,Took office,Left office,Party,Home State\n1,George Washington,http://en.wikipedia.org/wiki/George_Washington,30/04/1789,4/03/1797,Independent,Virginia\n2,John Adams,http://en.wikipedia.org/wiki/John_Adams,4/03/1797,4/03/1801,Federalist,Massachusetts\n3,Thomas Jefferson,http://en.wikipedia.org/wiki/Thomas_Jefferson,4/03/1801,4/03/1809,Democratic-Republican,Virginia\n4,James Madison,http://en.wikipedia.org/wiki/James_Madison,4/03/1809,4/03/1817,Democratic-Republican,Virginia\n5,James Monroe,http://en.wikipedia.org/wiki/James_Monroe,4/03/1817,4/03/1825,Democratic-Republican,Virginia\n6,John Quincy Adams,http://en.wikipedia.org/wiki/John_Quincy_Adams,4/03/1825,4/03/1829,Democratic-Republican/National Republican,Massachusetts" //"Sample Text repacement for future cvs data"content to save // Write File do { try contentsOfFile.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding) print("File sample.txt created at tmp directory") } catch { print("Failed to create file") print("\(error)") } } // Share button @IBAction func shareDoc(sender: AnyObject) { print("test share file") docController.UTI = "public.comma-separated-values-text" docController.delegate = self//delegate docController.name = "Export Data" docController.presentOptionsMenuFromBarButtonItem(sender as! UIBarButtonItem, animated: true) //} } 

当我点击模拟器中的共享文件button,我看到以下内容:

在这里输入图像说明

并快速查看它显示

在这里输入图像说明

所以接下来的事情是我的iPhone 5testing,我试图发送电子邮件sample.csv,但我只得到消息正文,而不是csv文件?

  1. 我怎么能真正电子邮件的.csv文件?
  2. 哪些出口可能性在那里?

为了通过电子邮件.csv文件,您可以执行以下操作:

  1. 将此导入添加到类的顶部。 它允许您使用MFMailComposeViewController,这是一种发送电子邮件的方式。

     import MessageUI 
  2. 生成你的数据,我做的一个例子是:

     // Creating a string. var mailString = NSMutableString() mailString.appendString("Column A, Column B\n") mailString.appendString("Row 1 Column A, Row 1 Column B\n") mailString.appendString("Row 2 Column A, Row 2 Column B\n") // Converting it to NSData. let data = mailString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) // Unwrapping the optional. if let content = data { print("NSData: \(content)") } 
  3. 生成MFMailComposeViewController

     // Generating the email controller. func configuredMailComposeViewController() -> MFMailComposeViewController { let emailController = MFMailComposeViewController() emailController.mailComposeDelegate = self emailController.setSubject("CSV File") emailController.setMessageBody("", isHTML: false) // Attaching the .CSV file to the email. emailController.addAttachmentData(data!, mimeType: "text/csv", fileName: "Sample.csv") return emailController } // If the view controller can send the email. // This will show an email-style popup that allows you to enter // Who to send the email to, the subject, the cc's and the message. // As the .CSV is already attached, you can simply add an email // and press send. let emailViewController = configuredMailComposeViewController() if MFMailComposeViewController.canSendMail() { self.presentViewController(emailViewController, animated: true, completion: nil) } 

在你的情况下,因为你已经创build了这个文件,你可以直接通过改变CSV附加到邮件的行来直接附加这个文件:

  emailController.addAttachmentData(NSData(contentsOfFile: "YourFile")!, mimeType: "text/csv", fileName: "Sample.csv") 

回答基于: 将csv附加到电子邮件xcode , 在Swift中创buildCSV文件并写入文件

在Swift 3中创buildCSV文件

 class ViewController: UIViewController { var taskArr = [Task]() var task: Task! override func viewDidLoad() { super.viewDidLoad() task = Task() for _ in 0..<5 { task.name = "Raj" task.date = "\(Date())" task.startTime = "Start \(Date())" task.endTime = "End \(Date())" taskArr.append(task!) } creatCSV() } // MARK: CSV file creating func creatCSV() -> Void { let fileName = "Tasks.csv" let path = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName) var csvText = "Date,Task Name,Time Started,Time Ended\n" for task in taskArr { let newLine = "\(task.date),\(task.name),\(task.startTime),\(task.endTime)\n" csvText.append(newLine) } do { try csvText.write(to: path!, atomically: true, encoding: String.Encoding.utf8) } catch { print("Failed to create file") print("\(error)") } print(path ?? "not found") } } 

任务模型类

 class Task: NSObject { var date: String = "" var name: String = "" var startTime: String = "" var endTime: String = "" } 

CSV输出显示如下格式

在这里输入图像说明